gpt4 book ai didi

mysql - 具有多个 WHERE 条件的 SELECT 语句

转载 作者:行者123 更新时间:2023-11-29 01:36:58 25 4
gpt4 key购买 nike

我正在尝试创建一个需要多个 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.00

Apparently 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com