我的用户表中有一个名为'points'的字段, 并且根据他们的积分有多高排名,得分最高的人是排名第一。
我如何通过DESC顺序中的'积分'命令成员,然后获得玩家所处的索引,以便我可以对其进行排名? 我为我的排名页面使用了一个循环,但我无法真正遍历每个玩家。 我正在使用PDO。
$q = mysql_query("SELECT count(points) FROM members WHERE id = {$id}");
$rank = mysql_result($q, 0, 0) + 1;
我有代码,但我的问题是它在mysql_中,我需要它在PDO中我不知道如何做到这一点因为mysql_result在pdo中丢失了一些参数( - > fetchColumn我相信)
另一种解释它的尝试: 我想按顺序按顺序对用户进行排序,然后使用ROW NUMBER作为排名,如何获取原始行号?
答案 0 :(得分:2)
您要做的是使用内部查询对结果集进行排名,然后外部查询将结果集限制为您需要其排名的用户。喜欢:
/* Assuming the users' table is "members" and it contains the field "points" */
SELECT mo.* , (
SELECT COUNT( * ) FROM members mi
WHERE mi.points >= mo.points // >= for desc order, <= to for ascending order
) AS rank
FROM members mo
WHERE id = @id // Replace @id with the id
行号/他们的排名将是结果中的排名字段。
外部注意:您不希望像上面的查询那样执行mo.*
,而是选择结果集中所需的特定列.... SELECT mo.id, mo.name, ...