比较mysql中列的值

时间:2012-10-29 02:50:56

标签: php mysql

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

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

如何让PHP比较投票字段中的值并按最高编号排序,并附上#1,2,3等...取决于它有多少票?

每个值将显示在单独的页面上。如果我去ID为1的'bobs page',我需要它来显示'#2 bob',因为他将被投票等排名第二。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

此查询应该允许您获取一个数组,其中包含您表中每个人的等级,姓名和投票数。

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

答案 3 :(得分: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/>";
}
?>