2

我知道我以前做过这个,但是有一段时间没有做太多的 SQL 了。

我有一个名为lead_detail 的表,它有以下列:id, lead_id, form_id, field_number, value

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

因此,最初,我得到了对特定问题有特定答案的所有潜在客户 ID。

假设第一个过滤器是我想要对“你喜欢鸡肉”的问题(field_number 为 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'
4

2 回答 2

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'

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

于 2013-01-31T19:38:26.213 回答
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'
于 2013-01-31T19:51:31.833 回答