似乎无法将不同类型的信息拼凑起来以获得我想要的东西,所以这里就是..
三个不同的表格:
Entities id name 1 A 2 B 3 C
Tags id name 1 tag_1 2 tag_2 3 tag_3
Users id name 1 user_1 2 user_2
两个实体:标签和用户:标签与实体和具有任意数量标签的用户的1:n关系。有两个表来处理这些关系; entities_tags和users_tags。例如:
entities_tags entity_id tag_id 1 1 1 2 2 1 2 2 2 3 3 1
users_tags user_id tag_id 1 1 1 2
现在,给定一个用户,我想获取其标签全部包含在用户标签中的所有实体。在我的示例中,user_1应该获取实体A和C.如果需要,我可以单独获取用户标签,如下所示。
我试过
SELECT entities.*
(SELECT GROUP_CONCAT(entities_tags.name SEPARATOR ', ')) AS tags
FROM entities
LEFT OUTER JOIN entities_tags ON entities_tags.entity_id = entities.id
LEFT OUTER JOIN tags ON tags.id = entities_tags.tag_id
WHERE tags.name IN ('tag_1','tag_2')
GROUP BY entities.id
HAVING COUNT(tags.name) = 2
但这只会给我A和B而不是C.我不应该得到B,但我应该得到C.