我无法让这个查询起作用。我尝试了这个,但不起作用:
SELECT tags.*
FROM blog_tags AS tags
LEFT JOIN blog_items AS items ON (items.authorid = 4)
LEFT OUTER JOIN blog_items_tags AS itemstags ON (itemstags.itemid = items.id)
GROUP BY tags.id
我想要的是获取作者在文章中使用的所有标签。
对于这个想法:数据库是:
什么是正确的陈述? (我对mysql不是很熟悉)
答案 0 :(得分:2)
我总是在这种情况下使用子查询。你也可以使用连接,但是我从来没有像写那些那样舒服(而且我认为他们无论如何都会评估相同的数据库查找 - 但如果我错了就纠正我!),所以我会写这样的东西:
SELECT tags.* FROM tags WHERE id IN (
SELECT tagid FROM blog_items_tags WHERE itemid IN (
SELECT id FROM blog_items WHERE authorid = 4
)
);
它比连接更麻烦,但当我回去阅读它时,对我来说更有意义 - 希望这有帮助!
修改:如果您想要使用每个代码的次数,可以在查询中添加COUNT
和GROUP BY
:
SELECT tags.*, COUNT(*) FROM tags WHERE id IN (
SELECT tagid FROM blog_items_tags WHERE itemid IN (
SELECT id FROM blog_items WHERE authorid = 4
)
) GROUP BY tags.title;
答案 1 :(得分:1)
通过运行此查询的更简单版本进行故障排除,然后进行构建。从
开始SELECT tagid FROM blog_tags
然后开始工作。
特别是,尝试删除AS。 SQL的这种风格可能要求它不存在:
SELECT tagid FROM blog_tags tags
答案 2 :(得分:1)
您缺少连接条件(您的blog_tags表未在任何地方使用)。此外,您只需要INNER JOIN
,因为您只需要使用的代码,而不是所有代码和相关信息。
以下是更正的查询:
SELECT tags.*
FROM blog_tags AS tags
INNER JOIN blog_items_tags AS itemstags ON (itemstags.tagid = tags.id)
INNER JOIN blog_items AS items ON items.authorid = 4 AND items.id = itemtags.itemid
GROUP BY tags.id