gpt4 book ai didi

mysql - 用于检索选票的 SQL 语法奇怪地遗漏了一些结果

转载 作者:行者123 更新时间:2023-11-30 01:30:50 25 4
gpt4 key购买 nike

我尝试查看其他帖子来执行 Mysql 查询,我想我已经差不多完成了,但由于某种原因我遇到了错误。

我有这些 table :

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 决定默认显示的帖子),则有关饮食类别的整行根本不会显示.

我已经两天了……有什么想法吗?

非常感谢。

最佳答案

在单个查询中实现起来并不复杂。使用一些临时表会很容易。如果你想在单个查询中使用它,那么你可以尝试使用 row_number 。

示例:

SELECT id_activity,activity_name,id_post,v_count FROM(
SELECT id_activity,activity_name,id_post,v_count
,@rownum := IF(@prev_value=id_activity,@rownum+1,1) AS RowNumber
,@prev_value := id_activity
FROM (
select a.id_activity,a.activity_name,p.id_post,v.v_count
from activities a
left join posts p on p.activity=a.id_activity
left join (
select id_post,count(*) v_count from votes v1
group by id_post
) v on v.id_post=p.id_post
order by a.id_activity, v.v_count desc) as tmp
,(SELECT @rownum := 0) r
,(SELECT @prev_value := '') y
)tmp2
WHERE rownumber=1

FIDDLE

关于mysql - 用于检索选票的 SQL 语法奇怪地遗漏了一些结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com