很抱歉问题的标题,我不知道如何表达这个问题。
我有一个看起来像这样的表格:
entry_id | cat_id
---------+-------
1 | 23
1 | 17
1 | 34
1 | 11
2 | 25
2 | 28
2 | 90
2 | 23
然后我有不同的类别数组
$cats1 = [23, 46, 67]
$cats2 = [34, 28, 91]
我需要取回两个数组中都有 cat_id
的 entry_id
,但如果我这样做
->where_in('cat_id', $cats1)->where_in('cat_id', $cats2)
显然这不起作用,因为没有行有多个与其关联的cat_id
。在本例中,我想要返回的 entry_id
将为 1
,因为它也包含来自第一个 array(23)
的值作为第二个数组(34)
中的一个。
我无法使用or_where
,因为结果不准确。我可以使用直接的 SQL select 语句,但我想知道是否有一种方法可以在这样的表上实现这种类型的查询。我不是 SQL 专家,因此我们将不胜感激。
我目前已经使用另一个解决方案使其工作,其中我从第一个 where_in
获取 entry_id
,然后让另一个查询执行 where_in
那些 id
和 where_in
第二个猫数组,但我更喜欢一次性完成整个查询。
这是 PHP 语言。
最佳答案
(更新,更正:)需要DISTINCT
:
SELECT DISTINCT a.entry_id
FROM tableX AS a
JOIN tableX AS b
ON b.entry_id = a.entry_id
WHERE a.cat_id IN (23, 46, 67)
AND b.cat_id IN (34, 28, 91) ;
<小时/>
如果您有一个 entry
表,您还可以使用 JOIN
:
SELECT DISTINCT e.entry_id
FROM entry AS e
JOIN tableX AS a
ON a.entry_id = e.entry_id
JOIN tableX AS b
ON b.entry_id = e.entry_id
WHERE a.cat_id IN (23, 46, 67)
AND b.cat_id IN (34, 28, 91) ;
或EXISTS
相关子查询:
SELECT e.entry_id
FROM entry AS e
WHERE EXISTS
( SELECT *
FROM tableX AS a
WHERE a.entry_id = e.entry_id
AND a.cat_id IN (23, 46, 67)
)
AND EXISTS
( SELECT *
FROM tableX AS b
WHERE b.entry_id = e.entry_id
AND b.cat_id IN (34, 28, 91)
) ;
关于php - Active Record 或 SQL 中的多个Where In,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11375355/