SELECT firstname, lastname, id
FROM contact
WHERE id IN
(SELECT contactid
FROM taglist
WHERE contactid IN
(SELECT contactid
FROM customerlist
WHERE companyid = 1) AND (tagid = 1 OR tagid = 4))
我有上面的查询,其中有一个包含用户 ID 和标签 ID 的表。每个用户可以有多个标签,这些标签在此表中作为单独的条目列出。
我需要能够仅选择具有两个或更多指定标签的用户。我认为上面的查询可以做到这一点,但它返回带有标签 1 或标签 4 的每个用户。
如果我将其更改为:(tagid = 1 AND tagid = 4)),我会得到 0 个结果,因为它只查看每个单独的条目,并且每个用户没有条目拥有多个标签。
此示例仅选择了两个标签,但此处的目标是允许最终用户能够选择任意数量的可用标签,并且仅显示用户匹配所有选定标签的结果。
我没有任何方法知道将选择匹配的标签的具体数量。目前有 20 个可用标签,客户可以根据需要添加自己的标签。
那么我该如何实现这个目标呢?我对 SQL 查询非常陌生,而且对连接还不太熟悉,所以我认为这与它有关,但我不知道。任何朝着正确方向的插入将不胜感激。
最佳答案
您可以通过执行以下操作获取带有两个标签的联系人:
SELECT contactid
FROM taglist
WHERE tagid IN (1, 4)
GROUP BY contactid
HAVING COUNT(*) = 2;
您的查询的其余部分正在执行您的问题中未提及的其他内容,因此不清楚您真正想要什么。显然,您可以将其用作子查询来获取完整的联系
信息。
关于MYSQL QUERY 具有来自单个表的多个选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50217625/