我正在使用一个系统,用户可以将标签附加到消息上以便于搜索/识别(就像这里一样)。这是简化的架构:查找与标签组相关的标签
message: message_id
tag: tag_id, tag_name
tag_message: tag_id (FK), message_id (FK)
我面临的问题是:
鉴于tag_id
的输入列表,我想找到什么其他的标记出现在标记有在输入的信息标签
这是我想出了查询:
SELECT
tag2.tag_name,
COUNT(*) AS tagged_message_count
FROM tag AS tag1
LEFT JOIN tag_message ON tag_message.tag_id = tag1.tag_id
LEFT JOIN message ON message.message_id = tag_message.message_id
LEFT JOIN tag_message AS tag_message2 ON tag_message2.message_id = message.message_id
LEFT JOIN tag AS tag2 ON tag_message2.tag_id = tag2.tag_id
WHERE
tag1.tag_id = ?
AND
tag1.tag_id <> tag2.tag_id
GROUP BY
tag2.tag_id;
它作品但它只适用于1个标签,我需要它与标签组合作。
鉴于标签ID 1,2,3
我们应该首先找到所有标有这三个标签的邮件,然后查看其他标签并返回它们。
我有一种感觉,每个标签都会有额外的连接,但是我不确定如何修改查询来修改它。
'...标记有这三个标签,...' :**全部**这三个标签,或者**这三个标签中的任何**? – joop
所有这三个标签都需要附加到邮件中,我们通过标签过滤邮件(我们只想要包含所有这些标签的邮件,但可能还有其他一些) – Eleeist