按分配给帖子的每个标签按语言计算帖子

时间:2015-06-01 18:10:15

标签: mysql sql

我有以下表结构:

enter image description here

帖子有一个到多个标签。每个帖子都分配了一种语言 - 英语或德语。我希望每个标签都能获得特定语言的帖子数量 - 换句话说,我需要知道英语和德语中有多少帖子分配了特定标签

我想到的结果是:

enter image description here

posts_count_enposts_count_de是别名。我知道这些表格应该JOIN,但我不知道如何GROUP查询来获取帖子COUNT。任何帮助或建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

你的问题的结构基本上是一堆连接,聚合和不同语言的一些条件:

select t.*,
       sum(l.code = 'en') as posts_en,
       sum(l.code = 'de') as posts_de
from posts p join
     languages l
     on p.language_id = l.id join
     post_tags pt
     on pt.post_id = p.id join
     tags t
     on pt.tag_id = t.id
group by t.id;

更大的问题是您的数据结构不一致,我并不完全理解。这些帖子具有与之关联的语言ID。然而,对于标签,语言在标签上旋转。为什么没有与标签关联的语言ID。

这会使数据结构更加复杂。您将拥有带标签ID的标签表。然后是TagLanguages表,其中包含映射到语言的表。我不确定你的应用程序是否需要这种灵活性,但是在一个案例中使用连接访问语言而在另一个案例中没有连接这些语言似乎很奇怪。