我有一个像这样的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万条目。如果您有任何问题,请与我们联系。
答案 0 :(得分:2)
尝试此查询:
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);
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;