假设我有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',因为他将被投票等排名第二。
答案 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/>";
}
?>