我知道我以前做过这个,但有一段时间没有做过太多 SQL 了。
我有一个名为 Lead_detail 的表,它具有以下列:id
、lead_id
、form_id
、field_number
,值
。
我正在尝试获取结果,然后对其进行过滤。
因此,最初,我获得了对特定问题有特定答案的所有潜在客户 ID。
假设第一个过滤器是我想要对“你喜欢鸡肉吗”问题(field_number 为 4)回答"is"的所有结果。
$leadIds = query(SELECT lead_id FROM lead_detail WHERE field_number = '4' AND value = 'yes' AND form_id = '1')
$leadIds = implode(', ', $leadIds);
然后,我可以通过以下方式获取适当的过滤数据
从 Lead_detail 中选择 * WHERE form_id = '1' 和 Lead_id IN ($leadIds)
这非常有效。
如果我想添加第二个过滤器,我需要对同一查询中的同一列进行两次查询。我想我需要与表别名或一些子选择进行某种连接,但不记得如何做到这一点。
因此,如果我需要知道谁对“你喜欢鸡肉吗”的问题回答"is"以及谁对“你的年龄”回答“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'
最佳答案
内部联接可以解决这个问题:
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'
然而,可能有一个更简洁的解决方案。
关于php - SQL对同一个表和列进行多重选择以进行数据过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14633618/