3

ラップタイムのデータをデータベースに保存しています。データは距離、時間、平均速度、最大速度で構成されています。

設定したクエリの上位 10 人を表示するリーダーボードを表示しようとしています (合計で最も遠くまで行った人、最高の平均時間など)。ただし、トップ 10 の下には、リーダーボードにログインしているユーザーを表示したいと考えています。これを行うには、同じクエリを実行して結果を並べ替え、ROW NUMBER を追加して位置を取得しようとしています。

私はDoctrine ORMでsymfony 1.4を使用していますが、クエリで行番号を取得する方法を一生理解できません。次のようにSQLで実行できることを知っています:

SELECT full_name, ROW_NUMBER() OVER(ORDER BY distance) AS row_number

しかし、Doctrine Symfony では動作しません。

これを行う方法について誰かアイデアがありますか? (またはそれについての別の方法でさえ)

前もって感謝します。

4

1 に答える 1

0

私の解決策は次のとおりです。

もう少し実験と共同作業を行った後、これに対する答えを見つけました。

私がしたことは、選択を取り除き、結果の順序付きリストを返すことでした。

$results = self::getInstance()->createQuery('r')
    ->orderBy('r.distance')
    ->execute();

次に、この結果を配列にハイドレートし、array_search() を使用して配列内の結果のキーを見つけました (幸い、ここでユーザー データを返しているので、配列で探しているユーザーを知っています)。

$index = array_search($user->toArray(), $results->toArray());

次に、$index + 1を返して、リーダーボードでのユーザーの位置を得ることができます。

おそらく、このデータベース側を行うためのより良い方法がありますが、私はその方法を見つけることができませんでした.

誰かがより良い解決策を持っている場合は、共有してください。

于 2011-06-10T11:13:14.563 に答える