Php Mysql排名位置

Php Mysql排名位置,php,mysql,rank,Php,Mysql,Rank,数据库: id first_name points 1 Bob 12 2 Jane 50 3 Jack 2 4 Bill 10 5 Nick 62 6 Kathy 18 7 Steve 42 8 Anne 52 脚本: <?php $con = mysql_connect(

数据库:

id  first_name  points
1   Bob          12
2   Jane             50
3   Jack             2
4   Bill             10
5   Nick             62
6   Kathy            18
7   Steve            42
8   Anne             52
脚本:

<?php
$con = mysql_connect("localhost","root","lol");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("st", $con);

$result = mysql_query("SELECT first_name,points,
          @curRank := @curRank + 1 AS rank
FROM      person p, (SELECT @curRank := 0) r
ORDER BY points DESC");

while($row = mysql_fetch_array($result))
  {
  echo $row['first_name'] . "  " . $row['points'];
  echo "<br />";
  }

mysql_close($con);
?>

现在我需要添加到用户位置排名(类似于top函数) 例如:



$position=1;
while($row=mysql\u fetch\u数组($result))
{
echo$row['first_name'.''..$row['points'.]顶部.$position;
回声“
”; $position++; }
>P>你应该考虑实际提取和打印出秩:

echo $row['first_name'] . "  " . $row['points']. " Top {$row['rank']}";
$top=1;
while($row=mysql\u fetch\u数组($result))
{
echo$row['first_name'.''..$row['points'.]顶部.$TOP;
回声“
”; $top++; }
从您的查询中,我使用MySQL中的
CONCAT
函数添加了
TOP
word。 试试这个:

SELECT   first_name,
         points,
         CONCAT('TOP ',@curRank := @curRank + 1) AS rank
FROM     person p, (SELECT @curRank := 0) r
ORDER BY points DESC"

问题是什么?看看您的SQL,我想说,
$row['rank']
应该包含您感兴趣的打印值。对于分数相同的人,他们应该排名相同还是排名高于其他人?这并不总是有效的,如果对结果进行分页,则在每一页的开头位置会重置为1。@bowlerae是的,但是在这个问题上没有关于分页的内容。另外,如果两个或多个结果具有相同的排名,则需要将其标记为
1,2,3-5,3-5,3-5,6,7
。但在这个问题上也没什么。不要试图在简单的问题中发现困难:)任何方法都可以编辑第一行并添加类似
$position=($page-1)*$per_page+1并且我的代码可以正常工作。祝你过得愉快。我很好奇,因为我需要一个关于排名的帮助,但没有人解决过这个问题。我不想问一个新问题,也不想被打扰,因为这本质上是同一个问题。分页是一个有细微差别的不同问题,问如何组合逻辑元素(分页/排名/排序/等等)并不奇怪正确。这并不总是有效的,如果结果是分页的,那么在每一页的开头,排名就会重置为1。OQ中没有提到分页,没有限制的查询claude排除了这一点。使用
FROM(选择@curRank:=0)
进行查询的效果与我的$rank=1完全相同。感谢您的向下投票。这并不总是有效的,如果对结果进行分页,则在每一页的开头将top重置为1。
<?php
$con = mysql_connect("localhost","root","lol");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("st", $con);

$result = mysql_query("SELECT first_name,points FROM person ORDER BY points DESC");

$rank=1;
while($row = mysql_fetch_array($result))
  {
  echo $row['first_name'] . " " . $row['points'] . " Top " . $rank++;
  echo "<br />";
  }

mysql_close($con);
?>
$position = 1;
while($row = mysql_fetch_array($result))
  {
  echo $row['first_name'] . "  " . $row['points'] . "  Top ".$position;
  echo "<br />";
  $position++;
  }
echo $row['first_name'] . "  " . $row['points']. " Top {$row['rank']}";
  $top = 1;
  while($row = mysql_fetch_array($result))
   {
      echo $row['first_name'] . "  " . $row['points']." TOP ".$top ;
     echo "<br />";

     $top++;
   }
SELECT   first_name,
         points,
         CONCAT('TOP ',@curRank := @curRank + 1) AS rank
FROM     person p, (SELECT @curRank := 0) r
ORDER BY points DESC"