表:
labels
id, user_id, name
messages_labels
id, message_id, label_id
labels.id
指的是message_labels.label_id
如果给出message-id和user_id,如何获得正确的结果未使用的标签?对于给定的消息ID,我指的是message_labels
中没有条目的标签,基本上只是选择要添加到消息中但尚未用于此消息的标签。
这意味着......
SELECT l.id, l.name
FROM labels l
INNER/LEFT JOIN messages_labels ml ON (l.id=ml.label_id)
WHERE... user_id=:user_id ...
... and `message_id <> :message_id`
...
答案 0 :(得分:2)
这应该工作:label_id上的LEFT JOIN
和消息ID,没有ML记录的任何内容都是你想要的
SELECT
l.id, l.name
FROM labels l
LEFT JOIN message_labels ml
ON l.id = ml.label_id
AND message_id = :message_id
WHERE l.user_id = :user_id
AND ml.id IS NULL
答案 1 :(得分:1)
一种方法:
SELECT labels.*, count(messages_labels.id) AS mlid
FROM labels
JOIN messages_labels ON labels.id = messages_labels.label_id
WHERE (user_id = :user_id) AND (message_id = :message_id)
GROUP BY labels.id
HAVING (mlid = 0)
如果我正确地读了你的问题。