1

3 つの列と 3 つの行があるとします。最初の列は ID、2 番目は名前、3 番目は投票です。お気に入り:

+----+------+-------+
| 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

投票を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 に答える
0

クエリによって返された値を配列に読み取り、その配列を並べ替えることができます。

于 2012-10-29T02:55:03.883 に答える
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 に答える