我正在使用一個系統,用戶可以將標籤附加到消息上以便於搜索/識別(就像這裏一樣)。這是簡化的架構:查找與標籤組相關的標籤
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