2011-06-09 62 views
3

我將數據存儲在數據庫中的單圈時間,數據由距離,時間,平均速度和最大速度組成。Symfony Doctrine查詢中的行號

我試圖顯示一個排行榜,它顯示了你設置的任何查詢中的前十個人(誰總共走了最遠,最好的平均時間等)。不過,在前十名以下,我想向排行榜中登錄位置的用戶顯示。要做到這一點,我試圖運行相同的查詢命令我的結果,並添加一個行號來獲得位置。

我使用symfony 1.4與教條ORM,我不能爲我的生活弄清楚如何獲得查詢中的行號。我知道你可以在SQL中這樣做:

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

但是我不能在Doctrine Symfony中工作。

有沒有人有任何想法,我可以做到這一點? (或甚至另一種方式去)

在此先感謝。

+0

我實際上有一個解決方案,我將結果水合成一個數組,它不是最好的,但它的工作原理。當堆棧溢出允許我時(7小時)將張貼它 – noShowP 2011-06-09 10:14:58

回答

0

確定繼承人我的解決方案:

我有種找到了答案,這經過一些嘗試和協作。

我所做的是擺脫了選擇,只是返回有序的結果列表;

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

然後我水合這個結果到一個數組,使用array_search()來查找結果的陣列(幸運的是我在這裏迴歸用戶數據的關鍵,我知道我在尋找的用戶陣列)

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

然後我就可以返回$指數+ 1給我在領先榜的位置的用戶。

有可能是一個更好的方式來做這個數據庫端,但我不能爲我的生活找出如何。

如果有人有更好的解決方案,請分享。

+1

這是工作,如何,你創造開銷使用PHP獲得排名。如果你的數據庫非常大,你會發現性能問題。 – Rmannn 2012-10-26 10:18:28