从SQL总列中获取排名

时间:2013-05-02 23:40:08

标签: php mysql

我有一个像这样的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万条目。如果您有任何问题,请与我们联系。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);

...虽然如果你想扩展这个,你可能想重新考虑如何构建你的数据。

答案 2 :(得分:0)

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

$sum = 0;
foreach ($array as $num){
    $sum = $sum + $num;
}
return $sum;