[英]How can we rank by sum of score on mySQL and PHP
| id | fb_uid | fb_full_name | ---------------------------- | 1 | 101 | user_101 | | 2 | 102 | user_102 | | 3 | 103 | user_103 | | 4 | 104 | user_104 |
| id | user_id | cat_id | score | ------------------------------- | 1 | 101 | 1 | 100 | | 2 | 102 | 1 | 200 | | 3 | 101 | 2 | 300 | | 4 | 104 | 1 | 450 | | 5 | 103 | 1 | 500 | -------------------------------
MySQL 和 PHP:我們如何得出以下結果:
| Rank | Name | score | ------------------------------ | 1 | user_103 | 500 | | 2 | user_104 | 450 | | 3 | user_101 | 400 | | 4 | user_102 | 200 |
嘗試這個:
SELECT
@rank := @rank + 1 AS Rank,
u.fb_full_name,
SUM(us.score) AS new_score
FROM userscore us INNER JOIN tbluser u ON us.user_id = u.id
CROSS JOIN (SELECT @rank := 0) param
ORDER BY new_score DESC
你應該試試這個:
SELECT @r := 0;
SELECT @r := @r + 1 AS Rank,u.fb_full_name AS Name,SUM(us.score) AS Score
FROM userscore as us
INNER JOIN tbluser as u ON us.user_id = u.fb_uid
ORDER BY new_score DESC;
這是純 SQL。
select count(us2.user_id)+1 rank, u.fb_full_name, us.score
from tbluser u
join (
select user_id, sum(score) score
from userscore
group by user_id
) us on us.user_id = u.fb_uid
left join (
select user_id, sum(score) score
from userscore
group by user_id
) us2 on us2.score > us.score
group by u.fb_full_name, us.score
order by rank, us.user_id
如果兩個玩家的分數相同,他們將獲得相同的排名,下一個排名將被跳過,例如
1 user1 500
2 user2 400
2 user3 400
4 user4 300
但是使用 PHP 對用戶進行排名要容易得多
select u.fb_full_name, sum(us.score) score
from tbluser u
join userscore us on us.user_id = u.fb_uid
group by u.fb_full_name
order by score desc, u.id
和類似的東西
$users = array();
$i = 0;
while ($row = $result->fetchAssoc()) {
$row['rank'] = ++$i;
$users[] = $row;
}
或者
$users = array();
$lastScore = null;
$lastRank = 1;
$rank = 0;
while ($row = $result->fetchAssoc()) {
++$rank;
if ($row[score] !== $lastScore) {
$lastRank = $rank;
}
$row[rank] = $lastRank;
$users[] = $row;
}
您必須在查詢中使用 JOIN ,如下所示:
SELECT tbluser.fb_full_name, SUM(userscore.score) AS userscore FROM tbluser
JOIN userscore ON tbluser.fb_uid = userscore.user_id
GROUP BY tbluser.fb_uid
ORDER BY userscore DESC;
在此處查看示例的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.