我有一个包含用户和积分的数据库(实际上是一个百分比,但这没关系)。得分最高的用户排在第一位,第二位排在第二位...
$searchedUserID
如果我做这样的想法,我可以获得a的排名:
SELECT `user_id`, `points` FROM `usertable` ORDER BY `points` DESC
/** This function returns the rank of a user. The rank nr. 1 is the best.
* It is possible that some users share a rank.
*
* @param int $searchedUserID the ID of the user whose rank you would like to
* know
*
* @return int rank
*/
function getUserRank($searchedUserID)
{
$userArray = getAllUsersOrderedByPoints();
$rank = 0;
$lastPoints = -1; // Never happens
foreach ( $userArray as $user) {
if ($user['point'] != $lastPoints) $rank++;
if ($user['user_id'] == $searchedUserID) break;
}
return $rank;
}
没有更直接的方法来使用(My)SQL 获得这个吗?如果不是:可以改进 PHP 部分吗?
(编辑:我可以将 PHP 计算的排名直接存储在数据库中……但这意味着我必须进行很多更新。)
edit2:也许GROUP BY
可以使用?就像是:
SELECT `user_id`, `points` FROM `usertable` GROUP BY `points` ORDER BY `points` DESC
这个查询的问题是我没有得到搜索到的 user_id。有必要发送第二个查询:
SELECT `user_id` FROM `usertable` WHERE `points` = $pointsOfTheUser