0

我想知道如何用 mysql 查询解决以下问题,但真的不知道如何继续

我有 3 张桌子(我会尽量保持简单)

          post

       id  | content 
           |
       1   | bla, bla..

          comment                          |                votes
                                           |
id | post_id | comment | date              |        id | comment_id | date 
                                           |           |            |
5  |    1    |  derp   | 2012-07-06        |        1  |     5      | 2012-07-07
6  |    1    |  nherp  | 2012-07-07        |        2  |     5      | 2012-07-08
7  |    1    |  yada   | 2012-07-08        |        3  |     5      | 2012-07-09
8  |    1    |  lala   | 2012-07-09        |        4  |     6      | 2012-07-10
                                           |        5  |     6      | 2012-07-11    
                                           |        6  |     7      | 2012-07-12
                                           |        7  |     8      | 2012-07-13
                                           |

它们以这种方式相互联系在一起

comment.post_id 是 post.id 的 fk

votes.comment_id 是 comment.id 的一个 fk

我试图发现的是,在每条评论之后,整个帖子获得了多少票。或者换句话说,在提交每条评论后,整个帖子获得了多少票。因此,对于我提出的这个示例案例,我期望的结果将是下表

                                      result

                  id | post_id | comment | date        | votes_after_submission
                     |         |         |             | 
                  5  |    1    |  derp   | 2012-07-06  |          7
                  6  |    1    |  nherp  | 2012-07-07  |          6
                  7  |    1    |  yada   | 2012-07-08  |          5
                  8  |    1    |  lala   | 2012-07-09  |          4

这让我的大脑打了个结,我尝试在 COUNT 语句中使用 CASE 关键字,但实际上并不能让它解决这个问题,谁能给我一些线索,或者指出我正确的方向,或者只是扔给我一些谷歌关键字搜索,因为我没有找到关于这个问题的任何东西。

4

3 回答 3

0

试试这个::

select 
comment.id,
post_id, comment,
date,
count(votes.id) as no_of_vote
from comment
inner join votes on (comment.id=votes.comment_id)
group by comment.id
于 2012-07-09T12:42:55.063 回答
0

试试这个:

select comment.id, comment.post_id, comment.date, count(1) Votes
    from comments, votes
    where comments.id = votes.comment_id and votes.date >= comments.date
    group by comment.id, comment.post_id, comment.date, 
于 2012-07-09T12:44:10.977 回答
0

如果我正确理解您的问题和示例结果,请尝试以下操作:

SELECT C.id,C.post_id,C.comment,C.date, 
       (SELECT COUNT(*)
        FROM votes AS V 
        WHERE V.date > C.date 
          AND V.comment_id IN (SELECT id FROM comment AS C2 
                               WHERE C2.post_id=C.post_id)) AS votes_after_submission
FROM comment AS C
ORDER BY C.post_id, C.date

我不确定它是最有效的,但它确实有效。

于 2012-07-09T12:49:04.953 回答