2011-06-09 18 views
3

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

私はあなたが設定したクエリ(トータルで最善の平均時間など)にトップ10人を示すリーダーボードを表示しようとしています。しかし、トップ10の下では、リーダーボードにインポジションを記録しているユーザーを表示したい。これを行うために、私は結果を注文し、位置を得るために行番号を追加する同じクエリを実行しようとしています。

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

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

しかし、私はそれをDoctrine Symfonyで動作させることはできません。

誰でも私がこれを行う方法について考えていますか? (または別の方法で行く)

ありがとうございます。

+0

私は実際にこれを解決して、結果を配列に収めますが、それは最良ではありませんが、動作します。スタックオーバーフローが可能なときに投稿します。 – noShowP

答えて

0

[OK]をHERESに私の解決策:

は、私は一種のいくつかのより多くの実験とコラボレーションをした後、これに対する答えを見つけました。

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

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

は、それから私は(幸運にも私はここで、ユーザデータを返す、と私は私が探していますユーザーを知っている配列の結果の鍵を見つけるために)(配列および使用array_searchにこの結果を水和配列)

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

私はその後、私のリーダーボードでのユーザーの位置を与える$インデックス+ 1を返すことができます。

おそらく、このデータベース側を行うにはより良い方法がありますが、私の人生の中でどのように見つけられないのでしょうか。

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

+1

これは動作しています、どうしたら、PHPを使用してランクを取得するオーバーヘッドを作成します。あなたのデータベースが非常に大きい場合は、パフォーマンスの問題が見つかります。 – Rmannn

関連する問題