SQL多选在同一个表和列上进行数据过滤

时间:2013-01-31 19:28:34

标签: php mysql

我知道我之前已经做过这件事,但有一段时间没做过多次SQL。

我有一个名为lead_detail的表格,它包含以下列:idlead_idform_idfield_numbervalue

我试图获得结果,然后过滤它们。

所以,最初,我得到了所有针对特定问题的特定答案的主要ID。

让我们说第一个过滤器就是我想要所有结果来回答"是"关于"你喜欢鸡肉的问题" (field_number of 4)。

$leadIds = query(SELECT lead_id FROM lead_detail WHERE field_number = '4' AND value = 'yes' AND form_id = '1')
$leadIds = implode(', ', $leadIds);

然后,我可以通过

获得适当的过滤数据

SELECT * FROM lead_detail WHERE form_id = '1' and lead_id IN ($leadIds)

这很有效。

如果我想添加SECOND过滤器,我需要对同一查询中的相同列执行两次查询。我认为我需要使用表别名或某些子选择进行某种联接,但不记得该怎么做。

所以,如果我需要知道谁回答了"是"关于"你喜欢鸡肉的问题"和谁回答" 18-24"在"你的年龄是多少",我如何得到合适的$ leadIds?

它类似于

的组合
SELECT lead_id FROM lead_detail WHERE field_number = '4' AND value = 'yes' AND form_id = '1'
AND
SELECT lead_id FROM lead_detail WHERE field_number = '5' AND value = '18-24' AND form_id = '1'

2 个答案:

答案 0 :(得分:4)

内部联接适用于此:

SELECT DISTINCT(ld1.lead_id)
FROM lead_detail ld1
INNER JOIN lead_detail ld2 ON (ld1.lead_id = ld2.lead_id)
WHERE ld1.field_number = '4' AND ld1.value = 'yes' AND ld1.form_id = '1' 
AND ld2.field_number = '5' AND ld2.value = '18-24' AND ld2.form_id = '1'

然而,可能有一个更简洁的解决方案。

答案 1 :(得分:0)

你能不能只使用

SELECT lead_id 
FROM lead_detail 
WHERE ((field_number = '4' AND value = 'yes') OR (field_number = '5' AND value = '18-24')) AND form_id = '1'