- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个需要多个 WHERE 条件的 SELECT 语句。那可能吗。这是场景。我有一个具有以下结构的表。
FormID (Type Int)
SubmissionID (Type Int)
FieldName (Type text)
FieldValue (Type text)
数据应该是这样的。表名称:提交值
FormID - SubmissionID - FieldName - FieldValue
24 ------ 5 ---------- username ------ johnk
24 ------ 5 ---------- firstname ------ John
24 ------ 5 ---------- lastname ------ King
24 ------ 5 ---------- address ------ 100 some street
24 ------ 5 ---------- email ------ johnemail@gma.com
24 ------ 9 ---------- username ------ cathym
24 ------ 9 ---------- firstname ------ Catherine
24 ------ 9 ---------- lastname ------ Mirusia
24 ------ 9 ---------- address ------ 100 some other street
24 ------ 9 ---------- email ------ cathyemail@gma.com
32 ------ 20 ---------- username ------ johnk
32 ------ 20 ---------- firstname ------ John
32 ------ 20 ---------- lastname ------ King
32 ------ 20 ---------- address ------ 100 some street
32 ------ 20 ---------- email ------ johnemail@gma.com
32 ------ 20 ---------- AdultTicket------ 5
32 ------ 20 ---------- SingleTicket------ 3
32 ------ 20 ---------- Total ------ $60.00Apparently this is an Entity-Attribute-Value (EAV) design, I have been told!
如您所见,“FieldName”、“FieldValue”等是表格字段的实际名称。来自同一用户的多个表单的条目也可以出现在表中。所以我的keyfield 是用户 emailID 和 formID。
然后字段名连同每个在线表单的字段值一起存储在表中。
因此,“用户名”、“名字”、“姓氏”、“地址”和“电子邮件”是表单中的实际字段,当用户提交他们的信息时,它会存储在如上所示的表中。
我想在另一个区域使用他们的 emailID 作为关键字段来显示用户的详细信息。
本质上这是必须发生的事情($user->email 给出当前用户的电子邮件):
SELECT username WHERE (FieldName = "email") AND (FieldValue = " $user->email")
但实际上要在我的示例中获得值“johnk”和“cathym”,我似乎必须做的是以下但我不是确定如何编码:
SELECT FieldValue WHERE (FieldName = "username")
(WHERE (FieldName = "email")
AND (FieldValue = " $user->email"))
有人可以帮我写这个脚本吗?
这是一个使用 RSForm!Pro 的 Joomla 网站。 RSForm!Pro 以上述方式存储表单输入!!!
=== 编辑 ====
说明: 上面显示的表格数据均来自一张表格。为了便于阅读,我只是在两组数据之间添加了一个空格。
您基本上可以忽略 FormID 和 SubmissionID。后端将来自各种不同表单的条目全部保存在一个表中,因此它跟踪表单 ID 和提交 ID。所以你可以看到最终在该表中会有各种 formID 和 submissionID。
在此示例中,数据是从同一个表单输入的,但有两个不同的提交 - 5 和 8。
在这种情况下,我只想使用登录用户的信息自动填充新表单的字段。
Last Name: John King
User Address: 100 Some Street
etc...
最佳答案
您可以自行加入表格:
SELECT t2.FieldValue FROM <table> t1
INNER JOIN <table> t2 ON t1.formId = t2.formId
WHERE t1.fieldName = 'email'
AND t1.fieldValue = '$user->email'
AND t2.fieldName = 'username'
我认为这会给你想要的结果,它是自连接同一个表,所以你能够返回正确的值。不幸的是,我现在无法对此进行测试,但希望这就是您所追求的。
基本上该表只能返回 x 行数,并且这些行不能引用 其他 返回的行(据我所知),因此不是引用 Null 值,而是设置该表在 FormId
值(所有关联行之间的连接)上自连接 (t1
, t2
) 所以对于每个 FormId
WHERE
子句要检查的数据已经是每个 FormId 的所有行。
这在您当前的 SQL 中是不可能的,因为您不知道 formID 并且无法找到它(也可以通过子选择来完成,但我不接受该路线)。
因此,新 SQL 的第一部分返回 where FormId = number
的整个 block ,然后检查该 block 中的 email address = name@whatever
和然后返回相应的用户名,在这个例子中。
希望对您有所帮助。
另请研究准备好的语句以及如何正确编写 PHP 和 SQL 代码,而不让您的数据库遭受滥用和风险。 Please read this link由总站发布。 PHP The Right Way对于这个主题也是一个很好的引用。
关于mysql - 具有多个 WHERE 条件的 SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39308430/
我是一名优秀的程序员,十分优秀!