【问题标题】:Row Number in Symfony Doctrine QuerySymfony 学说查询中的行号
【发布时间】:2011-09-11 13:10:31
【问题描述】:

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

我正在尝试显示一个排行榜,该排行榜显示您设置的任何查询中的前十名(谁走得最远,平均时间最佳等)。但是,在前十名下方,我想显示在排行榜中登录位置的用户。为此,我尝试运行相同的查询来排序我的结果并添加一个 ROW NUMBER 来获取位置。

我正在使用带有 Doctrine ORM 的 symfony 1.4,但我终其一生都无法弄清楚如何在查询中获取行号。我知道你可以像这样在 SQL 中做到这一点:

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

但我无法让它在 Doctrine Symfony 中运行。

有人对我可以做到这一点有什么想法吗? (甚至是另一种方式)

提前致谢。

【问题讨论】:

  • 我实际上有一个解决方案,我将结果水合到一个数组中,它不是最好的,但它有效。当堆栈溢出允许我(7 小时)时将发布它

标签: php database doctrine symfony-1.4 dql


【解决方案1】:

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

经过更多的实验和合作,我找到了答案。

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

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

然后我将这个结果水合到一个数组中,并使用 array_search() 在数组中找到结果的键(幸运的是我在这里返回了用户数据,并且我知道我在数组中寻找的用户)

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

然后我可以返回 $index + 1 来为我提供用户在排行榜中的位置。

可能有更好的方法来处理这个数据库方面的问题,但我一生都无法弄清楚如何做。

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

【讨论】:

  • 这是可行的,但是,您使用 php 创建开销来获得排名。如果你的数据库非常大,你会发现性能问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
相关资源
最近更新 更多