我有表标签和项目以及将标签与项目匹配的第三个表 tagitem。用户可以转到填充有标签列表的项目页面。单击标记后,将在 tagitem 表中插入一行,标记该项目。
为了防止用户两次将相同的标签应用于一个项目,我希望出现的标签列表排除任何已应用于该项目的标签。所以我认为提取标签的查询应该有一个条件,排除已经分配给给定项目的标签。但是,我在这样做时遇到了麻烦。
表格是:
标签
id|tag
项目
id|item
标记项目
id|tagid|itemid
提取所有标签的查询将是:
"SELECT * FROM tags"
由于包含与项目匹配的标签信息的表是 tagitem,因此我加入了它们。我需要弄清楚如何包含下面括号中粗略描述的条件,该条件不包括在相关项目的 tagitem 表中具有条目的任何标签。
SELECT t.*,ti.*
FROM `tags` t
LEFT JOIN `tagitem` ti
on t.id = ti.tagid
WHERE
ti.tagid NOT IN (SELECT * FROM tagitem WHERE itemid = '22')
GROUP BY t.id
这是我所得到的。(现在我遇到了一些奇怪的操作数错误。)将不胜感激有关正确方法的任何建议。谢谢!