【问题标题】:joining three tables and counting values连接三个表和计数值
【发布时间】:2016-01-25 17:52:34
【问题描述】:

我有如下三个表:

user             post                          answer

user_id          post_id    user_id            answer_id     post_id
1                1           2                  1            4
2                2           3                  2            2
3                3           2                  3            2
4                4           1                  4            1
                                                5            3
                                                6            2

所以,我有三个表 user、post 和 answer。在用户表中,我有我的用户的信息。在实际表中,还有其他列,如用户名和东西,但我省略了它们,因为它们与问题无关。

在帖子表中,我有用户在我的网页上发布的内容的信息。 post id 只是每个帖子的 id 编号,而 user_id 表示哪个用户发布了帖子。

在答案表中,我有每个帖子上发布的答案信息。 answer_id 只是每个答案上的 id 编号,而 post_id 表示答案发布在哪个帖子上。

我想对这三个表做的是我想按照答案最多到最少的顺序选择 user_id。

在这种情况下,user_id 1 发布了一个帖子 (post_id 4),而 post_id 4 得到了一个答案 (answer_id 1),user_id 2 发布了两个帖子 (post_id 1 和 3),这些帖子得到了两个答案 (answer_id 4 和5),user_id 3 发了一个帖子(post_id 2)得到了三个答案(answer_id 2, 3, 6),而user_id 4 没有发帖,所以得到0 个答案,这将给我user_id 按3, 2 的顺序, 1、4。

我希望我的问题有意义。对不起一个复杂的问题。如果您有任何建议让我的桌子更有条理,请告诉我。我是 DB 新手,所以我的表结构可能不是理想的方式。

【问题讨论】:

    标签: php mysql sql database


    【解决方案1】:

    试试这个:

    select u.user_id, count(a.answer_id) as answerCount
    from user u
    inner join post p on p.user_id = u.user_id
    inner join answer a on a.post_id = p.post_id
    group by u.user_id
    order by count(a.answer_id) desc;
    

    【讨论】:

    • 这将只产生用户 3、2 和 1,因为 4 没有答案
    【解决方案2】:
    select u.user_id, count(a.answer_id) as cnt_answers from user u
    left join post p on p.user_id = u.user_id
    left join answer a on a.post_id = p.post_id
    group by u.user_id
    order by cnt_answers desc;
    

    这应该会给出所需的结果。

    【讨论】:

      猜你喜欢
      • 2012-11-23
      • 2021-01-26
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 2016-12-20
      • 2014-10-16
      相关资源
      最近更新 更多