Doctrine 2随机选择一行(偏移0或1索引)?

时间:2011-12-22 08:49:28

标签: doctrine-orm dql

到目前为止,我认为学说没有选择随机行的方法。所以我想我有一个查询来获取行数

// pseudo code
$count = SELECT COUNT(i) FROM Item i WHERE ...

然后有一个真正的查询来使用放入setFirstResult

的PHP中的随机偏移来获取项目
$item = (SELECT i FROM Item WHERE ...)->setMaxResults(1)->setFirstResult(rand(0, $count))->getSingleResult()

问题是,我的rand()是从0还是1开始?那么结束? $count$count-1

3 个答案:

答案 0 :(得分:6)

setFirstResult()从0开始。

按照您的方法,您必须使用:

->setFirstResult(rand(0, $count - 1))->setMaxResults(1)->getSingleResult();

来源:

我同意文件在这一点上不清楚。但是,我们可以看到Doctrine \ DBAL \ Query \ QueryBuilder以这种方式使用它:

->modifyLimitQuery($query, $this->maxResults, $this->firstResult);

然后将其转换为Doctrine \ DBAL \ Platforms \ AbstractPlatform中的SQL:

final public function modifyLimitQuery($query, $limit, $offset = null)
{
    ...
    $query .= ' OFFSET ' . $offset;

OFFSET在SQL中基于0,我们可以推断出setFirstResult()也是从0开始的。

答案 1 :(得分:0)

我在我的应用中使用:

$item = (SELECT i FROM Item WHERE ...)
    ->setMaxResults($count)
    ->setFirstResult(1)->getSingleResult();

从1开始计数到记录总数

答案 2 :(得分:0)

无论你是从0还是1开始,你都必须分别取决于计数和计数-1