首先,我要说我是mysql的新手,并在该站点和其他站点上搜索了适合我的解决方案。我已经很接近了(我认为),但是似乎找不到解决方案。
我正在使用RSForms软件在Joomla网站上工作。我需要搜索一个表,其中一行包含FirstName,另一行包含LastName,另一行包含Email。最终,我正在寻找所有3共有的SubmissionId。SubmissionId是由某些表单软件生成的数字,该软件将所有表单提交元素按此ID分组。我需要搜索所有3共有的ID。这3个元素中的每一个都可能包含搜索的重复项。例如,搜索名字“ John”可能会产生多个结果。我想找到与“ John”和姓氏“ Doe”相匹配的SubmissionId,并通过电子邮件发送“ johndoe@gmail.com”,以便可以使用它来查找其他信息。也可能存在多个“ John”,“ Doe”和“ johndoe@gmail.com”匹配项。
我尝试了以下的多种变体(有/无ANY),并将结果放入数组中并遍历每个元素。我只成功获得了“约翰”的第一个实例。
$getresults = $db->setQuery("SELECT SubmissionId FROM my_table_values WHERE FormId = '$formid' AND FieldValue = '$fname' AND SubmissionId = ANY
(SELECT SubmissionId FROM my_table_values WHERE FormId = '$formid' AND FieldValue = '$lname' AND SubmissionId = ANY
(SELECT SubmissionId FROM my_table_values WHERE FormId = '$formid' AND FieldValue = '$email' ))");
---SubmissionValueId---|---FormId---|---SubmissionId---|---FieldName---|---FieldValue---
---------18192---------|-----20-----|-------5462-------|-----Email-----|---johndoe@gmail.com---
---------18193---------|-----20-----|-------5462-------|-----FName-----|---John---
---------18194---------|-----20-----|-------5462-------|-----LName-----|---Doe---
最佳答案
一种可能性是使用将my_table_values
与自身连接(甚至两次)的查询来创建可以进行检查的内容。例如...(一般警告:临时编码)...
select A.submission_id from my_table_values A inner join my_table_values B using (SubmissionID) inner join my_table_values C using (SubmissionID) where (A.formID="email" and A.fieldValue= "foo@bar.com") and (B.formID="lastname" and B.fieldValue= "bar") and (C.formID="first name" and C.fieldValue="bletch")
您将需要对该查询进行examine
,以查看(a)SQL处理器是否接受它,以及(b)它提出了什么样的执行计划。优选地,所有字段都应该被索引。您需要看到它计划每次都使用索引来缩小可能性列表,并且它计划首先使用选择性最高的字段(例如“电子邮件”)。
(using (fieldname)
语法特定于MySQL。您可能需要使用on
来完成相同的操作。)
关于mysql - 需要在mysql行之间找到一个公共(public)元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30039587/