连接三个表并计算值

时间:2016-01-25 17:52:34

标签: php mysql sql database

我有三个表如下:

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

所以,我有三个表用户,帖子和答案。在用户表中,我有我的用户的信息。在实际的表中,还有其他列,如用户名和内容,但我省略了它们,因为它们与问题无关。

在帖子表中,我有用户在我的网页上发布的内容的信息。 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新手,所以我的表结构可能不是理想的方式。

2 个答案:

答案 0 :(得分:3)

试试这个:

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;

答案 1 :(得分: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;

这应该给出所需的结果。

相关问题