需要在mysql行之间找到一个公共元素

时间:2015-05-04 20:42:26

标签: mysql forms joomla

首先让我说我是mysql的新手并且已经在这个网站和其他网站上搜索了一个对我有用的解决方案。我已经相当接近(我认为),但似乎无法找到解决方案。

我正在使用RSForms软件在Joomla网站上工作。我需要搜索一个表,其中一行包含FirstName,另一行包含LastName,另一行包含电子邮件。最终,我正在寻找所有共同的SubmissionId 3. SubmissionId是由某个表单软件生成的数字,该表单软件按此id对所有表单提交的元素进行分组。我需要搜索所有3共有的id .3个元素中的每一个都可能包含搜索的重复项。例如,搜索名字" John"可能会产生多重结果。我想找到匹配" John"的SubmissionId。和姓氏" Doe"并发送电子邮件" johndoe@gmail.com"所以我可以用它来查找其他信息。对于" John"," Doe"和johndoe@gmail.com"可能会有多个匹配。

我尝试了以下的许多变体(有/无ANY)并将结果放入数组并计算每个元素。我只是成功地获得了第一个" John"。

$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---|---Field‌​‌​‌​Value---
---------18192---------|-----20-----|-------5462-------|-----Email-----|---johndoe@gmail.com---
---------18193---------|-----20-----|-------5462-------|-----FName-----|---John---
---------18194---------|-----20-----|-------5462-------|-----LName-----|---Doe---

2 个答案:

答案 0 :(得分:0)

一种可能性是使用将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")

如果SQL处理器接受了(a),那么您需要examine该查询以及(b)执行计划的类型它提出来了。优选地,应该索引所有字段。您需要看到它计划每次使用索引来缩小可能性列表,并且它计划首先使用最具选择性的字段(例如“email”)。

using (fieldname)语法特定于MySQL。您可能需要使用on来执行相同的操作。)

答案 1 :(得分:0)

$getresults = $db->setQuery("
     SELECT 
       MAX(IF(FieldValue = '$fname',SubmissionId, NULL) as fnameId,
       MAX(IF(FieldValue = '$lname',SubmissionId, NULL) as lnameId,
       MAX(IF(FieldValue = '$email',SubmissionId, NULL) as emailId
     FROM my_table_values 
     WHERE FormId = '$formid' 
     GROUP BY FormId");