2

イベントテーブルには、AからEまでのIDを含むPos1という列があります。列に「E」が表示される回数と、他の番号と並んでランク付けされる場所を数える必要があります。

たとえば、この表では、「E」は1回発生し、 4にランク付けされています(D = 3、A = 2、C = 2、E = 1、B = 0)。

Pos1
E
C
D
C
D
D
A
A

私は完全なSQLアマチュアなので、最も近いのは各IDのカウントを出力する配列ですが、これは単一のIDのカウントランクの出力に限定する必要があります。

$query = "SELECT Pos1, COUNT(Pos1) FROM Events GROUP BY Pos1"; 

$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){

    echo $row['COUNT(Pos1)'] ."<br />";

}
4

2 に答える 2

5

これを試して:

SELECT Pos1, a.cnt, rank
FROM(
    SELECT a.Pos1, a.cnt, (@rank := @rank + 1) AS rank
    FROM(
        SELECT Pos1, COUNT(Pos1) cnt
        FROM Events
        GROUP BY Pos1
    ) a, (SELECT @rank := 0) b
    ORDER BY a.cnt DESC
)a
WHERE a.pos1 = 'E';

SQLFIDDLEデモはこちら

編集:phpコード

$query = "SELECT Pos1, a.cnt, rank
          FROM(
            SELECT a.Pos1, a.cnt, (@rank := @rank + 1) AS rank
            FROM(
                SELECT Pos1, COUNT(Pos1) cnt
                FROM Events
                GROUP BY Pos1
            ) a, (SELECT @rank := 0) b
            ORDER BY a.cnt DESC
          )a
          WHERE a.pos1 = '$pos1'";

$result = mysql_query($query) or die(mysql_error());

$row = mysql_fetch_row($result);

echo $row['Pos1']." ".$row['cnt']." ".$row['rank']."<br />";
于 2012-08-22T09:48:34.720 に答える
0

または、PHP内でランク付けします。

$query = "SELECT Pos1, COUNT(Pos1) AS qty FROM Events GROUP BY Pos1 ORDER BY qty DESC"; 

$result = mysql_query($query) or die(mysql_error());
$rank=1;
while($row = mysql_fetch_array($result))
{
    echo $rank.": ".$row['Pos1']."(".$row['qty'].")<br />";
    $rank++;
}
于 2012-08-22T09:52:32.953 に答える