如何查找特定行值的排名?

时间:2013-04-18 18:10:07

标签: php mysql

我的表名为'points',如下所示,

name | point
abc    10
cde    5
efg    15

如何查找特定名称的排名?

例如:在上述情况下cde的等级为3

2 个答案:

答案 0 :(得分:2)

一种简单的方法(虽然它需要知道名称有多少个点)是计算它上面的行

SELECT COUNT(*) AS rank FROM tbl WHERE points > '%d'

答案 1 :(得分:0)

这将是你的SQL查询:

SELECT t.name FROM sometable t ORDER BY t.point DESC;

在php中运行查询后,您将获得一个已排序的结果集。然后你计算结果集,直到找到你的名字。那是你的等级。如果您希望排名走向另一个方向,请将DESC更改为ASC。您的函数的内容如下所示:

$rankingQuery = SELECT t.name FROM sometable t ORDER BY t.point DESC;
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    $rank = 0;
    $sth = $dbh->prepare($rankingQuery);
    $sth->execute();

    $name = $sth->fetchColumn(); 
    while ($name) {
      $rank = $rank + 1;
      if ($name == $DESIRED_NAME {
        return $rank;
      }
      $name = $sth->fetchColumn();
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}