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 キーワードを使用しようとしましたが、実際にはこの問題に対して機能させることができませんでした。この問題について何も見つからなかったので、Google キーワードで検索してください。

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 に答える