假设我有 3 列和 3 行,第一列是 ID,第二列是姓名,第三列是投票。喜欢:
+----+------+-------+
| id | name | votes |
+----+------+-------+
| 1 | bob | 7 |
| 2 | jill | 2 |
| 3 | jake | 9 |
+----+------+-------+
我如何让 PHP 比较投票字段中的值,并根据获得的最高票数对其进行排序,并根据获得的票数将其排名为 #1、2、3 等?
每个值都将显示在单独的页面上。例如,如果我访问 ID 为 1 的“bob's page”,我需要它显示“#2 bob”,因为他的得票排名第二。
最佳答案
您可以创建一个单独的列排名,并在您的投票发生变化时通过运行以下代码来更新它。这种方法将使您更有效率,因为当用户访问他的页面时,您不会一次又一次地对表格进行排序:
$q = "select * from tableName order by votes DESC";
$a = mysql_query($q);
$count = 1;
while($arr = mysql_fetch_array($a){
$up = "update tableName set(rank) VALUES($count) WHERE name=$arr['name']";
$aq = mysql_query($up);
$count++;
}
现在在单个页面上,您可以只检索排名值并显示
$user = "Bob";
$q = "select rank from tableName where name=$user";
$a = mysql_query($q);
$arr = mysql_fetch_array($a);
echo $arr[0];
另外这个(对其他答案的轻微修改)应该对你有用:-
SELECT @rownum:=@rownum+1 AS rank, name, vote FROM table, (SELECT @rownum:=0) as P ORDER BY vote DESC
关于php - mysql中列的排序和排名值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13115316/