php - SQL对同一个表和列进行多重选择以进行数据过滤

标签 php mysql

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

我有一个名为 Lead_detail 的表,它具有以下列:idlead_idform_idfield_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/

相关文章:

php - 未找到基表或 View :1146 in symfony3

mysql - 使用 bash 更新 mysql 列

mysql - sql 'AND' 没有给出正确的结果

mysql - 显示 mysql myisam 锁

Mysql 与关系表的内连接

mysql - tomcat 7.0.42池化,hibernate 4.2,mysql坚如磐石的自动重新连接解决方​​案

php - 获取 mySQL 数据库列中所有值的 sum()

php - 无效查询 : You have an error in your SQL syntax

javascript - 我无法点击输入字段

php - 阻止直接访问页面,但允许嵌入 iframe