0

列の 1 つが定義した値と等しい行をランク付けしたいテーブルがあります。

たとえば、このテーブルでは、Col1 = a であるすべての行を取得し、Col3 = Ross (Col2 のスコアでランク付け) である行のランクを見つけます。

Col1 | Col2 | Col3
------------------
a    | 10   | John
a    | 6    | Nick
a    | 8    | Ross
a    | 2    | Tim
a    | 4    | Paul
b    | 9    | John
b    | 3    | Nick
b    | 5    | Ross
b    | 7    | Tim
b    | 1    | Paul

最終的に私はこれを計算したい:

Col1 | Col2 | Col3 | Rank
-------------------------
a    | 10   | John | 1
a    | 8    | Ross | 2
a    | 6    | Nick | 3
a    | 4    | Paul | 4
a    | 2    | Tim  | 5

結果「2」を出力します。

このクエリでテーブルを並べ替えることができますが、できません。必要な結果を(phpで)印刷する方法を知っています。

$query = "SELECT * FROM exampleTable WHERE Col1 = a order by Col2 DESC";
4

3 に答える 3

1

pdoで

最初に pdo 接続を作成します

$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 
       'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, 
          PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

そのように使うより

$query= $pdo->prepare("SELECT * FROM exampleTable WHERE Col1 = a order by Col2 DESC");

$query->execute();
$article=$query->fetchAll(pdo::FETCH_ASSOC);

ループではなくfetchAllを使用している理由は、ループを使用するよりもメモリが重要な場合に高速です

PDO::fetchAll 対 PDO::fetch ループ

于 2012-10-23T19:22:24.543 に答える
1

これを試して:

"SET @rank=0; SELECT * FROM (SELECT *, @rank:=@rank+1 AS Rank FROM exampleTable WHERE Col1 = 'a' order by Col2 DESC) AS t"

これが動作することを示すテスト実行です。

ロスのランクを見つけたい場合は、ここWHERE Col3 = 'Ross'に示されているように、追加されたランク列のみを選択してクエリを実行できます。

于 2012-10-23T19:18:27.183 に答える