我对sql并不擅长,我尝试了很多不同的方法,无法提出可靠的解决方案。 基本上我有
我需要一个查询,它会告诉 nid 有多少个唯一的实例出现在 tid 的组合中。基本上使用两个或更多条件计数,并仅返回满足所有条件的行数。 tid 的组合可以超过2个或更多数字......这显然需要添加到查询中,这很好(我不希望一个接受数组的查询,如果这是有道理的) ......我只需要查询声音的逻辑。
我需要能够传递35&的 tid 。 45并接收“2”表示两个完整的匹配。 tid 35& 45都出现在 nid 4& 10,但由于 tid 45未出现在 nid 2中,因此不应计算它。我希望这是有道理的。
测试时:
26,27应回复“2”
35,27应回复“2”
31,35应该回复“1”
26,27,45应回复“1”
答案 0 :(得分:3)
显示nid
:4 and 10
SELECT nid
FROM taxonomy_index
WHERE tid IN (35,45) --- list of tid to check
GROUP BY nid
HAVING COUNT(DISTINCT tid) = 2 --- count of numbers in list
统计他们:
SELECT COUNT(*)
FROM
( SELECT nid
FROM taxonomy_index
WHERE tid IN (35,45)
GROUP BY nid
HAVING COUNT(DISTINCT tid) = 2
) AS grp
如果组合(nid,tid)
是唯一的,则COUNT(DISTINCT tid)
可以替换为COUNT(*)
。
另一种方式是:
SELECT COUNT(DISTINCT nid)
FROM taxonomy_index a
WHERE NOT EXISTS
( SELECT *
FROM taxonomy_index b
WHERE b.tid IN (35,45)
AND NOT EXISTS
( SELECT *
FROM taxonomy_index c
WHERE c.tid = b.tid
AND c.nid = a.nid
)
)