php - mysql中列的排序和排名值

标签 php mysql

假设我有 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/

相关文章:

Mysql - 选择 table1.something, table2.* WHERE 替换所有列,如 %something%

php - MailChimp API 2.0 批量订阅 PHP

mysql - 如何在带有 SUM 的多重连接查询中包含 DISTINCT

PHP mysql 多重内连接

php - 在 php :7. 4-fpm 镜像上安装 PHP-zip

Python MySQL连接器在游标循环中执行第二条sql语句?

php - 在服务器上运行时找不到 mysqli

php - 如何存储mysql设置?

php - 如何使用 Propel 类委托(delegate)

php - 为 PHPUnit 创建一个基本测试类并将其扩展为通用功能会导致类未找到错误