gpt4 book ai didi

php - MySQL 查询上周获得前 10 名积分的人?

转载 作者:太空宇宙 更新时间:2023-11-03 10:29:27 24 4
gpt4 key购买 nike

我正在尝试编写一个查询,以返回过去 7 天内在我的网络应用程序中获得最多积分的前 10 位用户的用户 ID。

我有三个表,它们一起包含我需要的信息。

  1. votingapi_votes 表。它记录了对评论或节点的每次赞成/反对票。
  2. 节点 表。它可以将节点 ID 与用户 ID 相关联,这样您就可以找出谁发布了获得选票的故事。
  3. comments 表,对评论做同样的事情。

我认为我需要编写一个查询,从 votingapi_vote 表中选择上周对评论或节点的每一次投票。

这是该表的结构:

  • vote_id
  • 内容类型
  • content_id
  • 值(value)
  • 值类型
  • 标签
  • uid
  • 时间戳

所以我会选择 content_type“node”或“comment”行,Unix 时间戳大于 time() - 684000。

然后它需要

  1. 按“content_id”对这些投票进行分组。

  2. 在“节点”和“评论”表中查找每个 content_id 各自的“user_id”值,以便我们知道是谁创建了节点和评论。

  3. 计算每个 user_id 从他的节点和评论中获得的总分数。

  4. 将这些 user_id 倒序排列,并将其限制为仅显示前 10 个。

呸。这似乎是我需要做的。现在实际查询是什么样的?

最佳答案

发布基于 OMG Ponies' answer

SELECT x.user_id, SUM(x.total_votes)
FROM (
SELECT n.user_id, SUM(vav.value) AS total_votes
FROM NODE n
JOIN VOTINGAPI_VOTES vav
ON vav.content_id = n.nid
AND vav.content_type = 'node'
WHERE vav.timestamp > NOW() - 684000
GROUP BY n.user_id
UNION
SELECT c.user_id, SUM(vav.value) AS total_votes
FROM COMMENTS c
JOIN VOTINGAPI_VOTES vav
ON vav.content_id = c.cid
AND vav.content_type = 'comment'
WHERE vav.timestamp > NOW() - 684000
GROUP BY c.user_id
) x
GROUP BY
x.user_id
ORDER BY
x.total_votes DESC
LIMIT 10

早期代码的问题在于它为每个用户返回 2 行,1 行用于评论,1 行用于节点。此代码将执行另一个 SUM 以将其聚合为每个用户仅 1 个数字。

关于php - MySQL 查询上周获得前 10 名积分的人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938553/

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