0

我有一个像这样的MySQL表......

ID | NAME  | RANK | PTS
---+-------+------+----
12 | John  | 1    | 28
18 | Andy  | 2    | 31
23 | Brian | 3    | 16
41 | Mike  | 4    | 33
15 | Jack  | 5    | 35
68 | Anne  | 6    | 24

我目前排序...

SELECT * FROM `ranks` ORDER BY PTS desc

我正在寻找一些可以给它的代码,ID它会返回它在 PTS 列中的排名。对于 ID 41,它应该返回 2 作为该列的第二个最佳分数。

我不确定用谷歌搜索什么来得到答案。是否有一些 SQL 代码可以简单地做到这一点?或者也许是php?该RANK列是总体排名,PTS是迄今为止的当前每周得分。最终可能会有多达 250 万个条目。请让我知道,如果你有任何问题。

4

3 回答 3

2

试试这个查询:

步骤1:

CREATE TABLE t (
id INT(3),
name char(60),
score INT(5)
);

insert into t values(10,"name1",33);
insert into t values(11,"name2",43);
insert into t values(12,"name3",335);
insert into t values(13,"name4",233);

第2步:

SET @rank=0;
SELECT @rank:=@rank+1 AS rank, name, id, score from t order by score desc
于 2013-05-02T23:49:09.733 回答
2
// get the number of ppl w/ points higher than the given user's
SELECT count(*) + 1 FROM ranks WHERE PTS > (
    SELECT PTS FROM ranks WHERE ID = 41);

...尽管如果您希望扩展它,您可能需要重新考虑如何构建数据。

于 2013-05-02T23:53:24.133 回答
0

您只需将 PTS 放入一个数组并创建一个循环来添加列输出。

$sum = 0;
foreach ($array as $num){
    $sum = $sum + $num;
}
return $sum;
于 2013-05-02T23:45:46.503 回答