我试图返回所有类别和任何相关/标签与他们相关的职位计数。
下面是一个表结构的示例。
posts表
id name user_id
1 post 1 1
2 post 2 2
3 post 3 1
本程序更新标记表
id tag_name
1 Category 1
2 Category 2
3 Category 3
支柱标记轴
id tag_id post_id
1 3 2
2 3 2
3 1 3
下面是查询的分类
获取所有标签
SELECT t.tag_name
FROM tags t
GROUP BY
t.tag_name
这会返回我所有的标签
获取所有带有post count的标签
SELECT t.tag_name, count(p.id) as count FROM products p
LEFT JOIN tags_pivot c ON p.id = c.post_id
LEFT JOIN tags t ON t.id = c.tag_id
WHERE p.user_id = 1
GROUP BY
t.tag_name
这将仅在找到结果/发布位置时返回标记。我想返回所有的标签,即使计数是0,并让计数显示0为特定的标签。有没有这样的方法来构造查询?我尝试了左外连接,但仍然得到相同的结果。
2条答案
按热度按时间z4bn682m1#
因为您想要考虑所有的标记,所以您的基表应该是
tags
table和你的LEFT JOIN
应该从那里开始。左联接总是考虑最左边表中的所有数据,并且只联接右表中与联接条件匹配的数据。所以所有的tags
被考虑(因为它是最左边的表),但是只有那些posts
数据透视表中的。请尝试以下操作:编辑基于op的评论,只考虑那些帖子在哪里
user_id = 1
. 为此,我们增加了一个额外的AND
中的要求LEFT JOIN
在posts
table。以下是更新的查询:z18hc3ub2#
首先使用left table name要包含哪些表值和计数值,对于示例数据,可以从left table开始使用tags\u pivot或tags