Symfony Doctrine查询中的行编号

3

我正在将圈数数据存储在数据库中,该数据包括距离、时间、平均速度和最大速度。

我正在尝试显示排行榜,展示根据任何查询条件排名前十的人员(总里程最长、平均耗时最好等)。但是,在前十名以下,我想展示已登录用户在排行榜中的位置。为了做到这一点,我正在尝试运行相同的查询,对结果进行排序并添加一个行号来确定位置。

我正在使用带有Doctrine ORM的Symfony 1.4,但我无法弄清如何在查询中获取行号。我知道可以在SQL中这样做:

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

然而,我在Doctrine Symfony中无法使其工作。

有没有人有任何想法,可以帮助我解决这个问题?(或者甚至有其他的方法)

提前感谢您的帮助。


我实际上有一个解决方案,可以将结果转化为数组,虽然不是最好的方法,但它能够工作。当 stack overflow 允许时(7小时后),我会发布它。 - noShowP
1个回答

0

好的,这是我的解决方案:

在更多的尝试和协作后,我找到了一个答案。

我所做的是摆脱选择并只返回结果的有序列表;

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

然后我将这个结果转换为数组,并使用array_search()在数组中查找结果的键(幸运的是,在这里我返回的是用户数据,我知道我要在数组中寻找的用户)
$index = array_search($user->toArray(), $results->toArray());

我可以返回$index + 1,以便知道用户在排行榜中的位置。

也许在数据库方面有更好的方法,但是我真的找不到。

如果有更好的解决方案,请分享一下。


3
这个功能是可行的,但是使用PHP获取排名会增加额外的开销。如果你的数据库非常大,会出现性能问题。 - Rmannn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接