php mysql 排名_php-MySQL查询从一张表中获得最佳排名,并用...

我有一个排名委员会,该排名委员会针对男性和女性的头100个最佳博客.

我有一个博客表:

PRIMARY

blogs_id users_id blogs_score blogs_score_time gender

1 11 2852 2015-09-09 05:21:51 m

2 23 2146 2015-09-10 07:31:54 m

3 23 2146 2015-09-10 07:32:26 m

4 23 2852 2015-09-10 04:42:15 m

5 51 1793 2015-09-11 08:15:55 f

6 88 2947 2015-09-11 09:33:18 f

我有一个用户表:

PRIMARY

id best_rank gender

11 0 m

23 0 m

51 0 f

88 0 f

我需要从Blogs表中为每个用户计算最佳排名(使用MAX(blogs_score)和MAX(blogs_score_time)),并为具有最高排名的每个性别的前100个用户插入/更新具有最佳排名的Users表.应该:

PRIMARY

id best_rank gender

11 2 m

23 1 m

51 2 f

88 1 f

由于用户ID 11与用户23得分相同但日期早于用户23,因此用户ID 11的最高排名为2.而由于女性组,用户51的排名为2.我添加了blogs_score_time列以防止平局排名.日期2015-09-10表示9月10日.

最终的想法是显示用户个人资料中的排名位置,一旦有人投票(博客表中的blogs_score发生变化),必须更新用户表中的best_rank列,并重新计算所有排名最高的100位用户的新排名特定的性别群体.

如何适应和修复此(无效)查询以满足我的需求?

$sql->query("UPDATE users

JOIN (SELECT b.users_id,

@curRank := @curRank + 1 AS rank,

MAX(blogs_score), MAX(blogs_score_time)

FROM blogs b

JOIN (SELECT @curRank := 0) r

ORDER BY b.blogs_score DESC, p.blogs_score_time DESC LIMIT 100

) ranks ON (ranks.users_id = users.id)

SET users.best_rank = ranks.rank");

或如何适应和修复此(无效)查询

$sql->query("INSERT INTO users (best_rank, id)

SELECT @rank := @rank + 1 AS rank, b.users_id

FROM blogs b

LEFT JOIN users u ON b.users_id = u.id

GROUP BY b.users_id, b.blogs_score, b.blogs_score_time, b.gender

ORDER BY b.blogs_score DESC, b.blogs_score_time DESC

ON DUPLICATE KEY UPDATE best_rank = VALUES(rank)");

请帮助我解决该问题.我没有在stackoverflow上找到任何类似的解决方案,而且我自己编写这样的查询似乎非常复杂.

在此先多谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值