0

Mysql クエリを実行するために他の投稿を調べようとしましたが、ほとんどそこにいると思いますが、何らかの理由でバグがあります。

私はそれらのテーブルを持っています:

POSTS [id_post (int) / activity (int) ]
VOTES [id_vote (int) / id_post (int) / user_id (int)]
ACTIVITIES [id_activity (int) / activity_name (varchar)]

実際にはそれよりも多くのテーブルとフィールドがありますが、これらは私の問題に関連するものです。投票中の投稿と投票者のユーザーアカウントを参照して、VOTES テーブルにユーザー投票を追加する投票システムを作成しました。

したがって、投票テーブルは次のようになります。

id_vote | id_post | user_id
   1        5         8
   2        6         8

すべての投稿はアクティビティに属しています。各アクティビティの投票数が最も多い投稿をリストしたいと思います。

それが私がこれまでのところです:

SELECT activities.id_activity, activities.activity_name, votes.id_post, votes.totalvotes AS allvotes
FROM ( SELECT votes.id_post, COUNT(*) as totalvotes
       FROM `votes`
       GROUP BY votes.id_post
     ) AS votes
JOIN posts ON posts.id_post = votes.id_post
JOIN activities ON posts.activity = activities.id_activity
GROUP BY activities.id_activity
HAVING allvotes = MAX(totalvotes)

これはうまく機能します。同じアクティビティの 2 つの投稿の投票数が同じである場合を除いて、必要なものを取得します。これらの投稿をグループ化した後にのみ表示されるのはどれか、なぜ他の投稿ではないのかわかりません。

id_activity | activity_name | id_post | allvotes
    5            eating          5         2
    3           sleeping         6         1

さらに重要なことに、私を本当に悩ませているのは、何らかの理由で一部のアクティビティが表示されないことです。上記の例で、食べるカテゴリに属する​​投稿 5 が実際に最も多くの票を獲得した投稿である場合、そのカテゴリが表示されることに気付きました。しかし、最も多くの票を獲得した食事カテゴリの投稿が 5 番目の投稿 (MYSQL がデフォルトで表示するように決定したもの) ではない場合、食事カテゴリに関する行全体がまったく表示されません。 .

私はこれに取り組んで2日が経ちました...何かアイデアはありますか?

本当にありがとう。

4

2 に答える 2

0

アクティビティごとにグループ化するためだと思います。mysqlでこのステートメントが許可されているのはなぜでしょうか。mssqlでは、アクティビティによってのみグループ化することは許可されていません。

これを試して:

SELECT activities.id_activity, activities.activity_name, votes.id_post, COUNT(*) as totalvotes
FROM votes
INNER JOIN posts ON posts.id_post = votes.id_post
INNER JOIN activities ON posts.activity = activities.id_activity
GROUP BY votes.id_post
HAVING totalvotes = MAX(totalvotes)

動作する場合は lmk :)

またはあなたの声明が変更されました:

SELECT activities.id_activity, activities.activity_name, votes.id_post, votes.totalvotes AS allvotes
FROM ( SELECT votes.id_post, COUNT(*) as totalvotes
       FROM `votes`
       GROUP BY votes.id_post
     ) AS votes
JOIN posts ON posts.id_post = votes.id_post
JOIN activities ON posts.activity = activities.id_activity
GROUP BY votes.id_post
HAVING allvotes = MAX(totalvotes)

私があなたを正しく理解していれば、同じアクティビティを持つ 2 つの投稿があるためです。投稿をグループ化せずにアクティビティをグループ化するとすぐに、1 つの投稿が消えます。

于 2013-07-05T07:46:48.303 に答える