1

假设我有 3 列和 3 行,第一列是 ID,第二列是名称,第三列是投票。喜欢:

+----+------+-------+
| id | name | votes |
+----+------+-------+
|  1 | bob  |     7 |
|  2 | jill |     2 |
|  3 | jake |     9 |
+----+------+-------+

我如何让 PHP 比较投票字段中的值并按数字最高的排序,并根据它的投票数附加 #1、2、3 等排名?

每个值将显示在单独的页面上。例如,如果我访问 ID 为 1 的“bob 页面”,我需要它显示“#2 bob”,因为他将在投票中排名第二。

4

4 回答 4

1

每当您的投票发生变化时,您都可以通过运行以下代码来创建单独的列排名并更新它。这种方法将使您更有效率,因为当用户访问他的页面时,您不会一次又一次地对表格进行排序:

    $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
于 2012-10-29T02:58:12.750 回答
0

您可以使用 MySQL 'ORDER BY' 并使用 PHP 显示这些排名:对于此示例:

<?php
//connection
//DB selection
$query = "SELECT * FROM table_votes ORDER BY votes DESC";
$result = mysql_query($query);

for(int $i=1; $row = mysql_fetch_array($result);i++)
{
    echo "#".$i.$row['name']."<br/>";
}
?>
于 2012-10-29T03:10:25.980 回答
0

您可以将查询返回的值读入一个数组,然后对所述数组进行排序。

于 2012-10-29T02:55:03.883 回答
0

您希望SELECT查询进行ORDER BY投票,并创建一个特殊变量来处理行的排名:

SELECT @rownum:=@rownum+1 AS rank, name, vote FROM table, (SELECT @rownum:=0) ORDER BY vote DESC

这个查询应该让你获取一个数组,其中包含你表中每个人的排名、姓名和投票数。

或者,您可以按投票排序,然后使用 PHP 自己添加排名值。

于 2012-10-29T03:03:08.750 回答