2011-06-09 34 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