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"