获取数据库中的条目索引而不获取其他结果

时间:2015-01-26 15:45:26

标签: php mysql

让我们直接进入我的问题并想象我们有这个简单的表

CREATE TABLE `test` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `score` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `test` (`id`, `score`)
VALUES
    (1, 10),
    (2, 15),
    (3, 6),
    (4, 17);

我想做的是以下内容。我想按分数排序,然后获得ID为3的字段的排名

由于ID 3的条目得分最低,因此排名为4。

我有这个查询,以按分数排序

SELECT @rownum:=@rownum+1 rank, id, score from test t, (SELECT @rownum:=0) r ORDER BY score DESC;

结果如下

rank  ||  id  ||  score

  1       4       17
  2       2       15
  3       1       10
  4       3       6

但是,我想要达到的目的是立即获得排名。没有其他值的排名和结果。我不能只添加WHERE CLAUSE,条件是ID应为3,因为如果我这样做,则排名始终为1,因为查询只匹配数据库中的一个条目。

如果不以某种方式对结果进行迭代,我将如何直接获得排名?

2 个答案:

答案 0 :(得分:2)

为什么不计算有多少比你想要的等级更好?

例如,对于id 3:

SELECT count(*)+1 FROM test where score > (SELECT score from test WHERE id = 3))

只需更改子查询末尾的id即可获得另一个id的等级

答案 1 :(得分:1)

为分数列添加索引并使用以下查询 -

select count(*) from test a join test b on a.score > b.score where a.id =3