我试图查看其他帖子来进行 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 天了……有什么想法吗?
谢谢一堆。