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

Doctrine orm 原则2随机选择一行(偏移量0或1索引)?,doctrine-orm,dql,Doctrine Orm,Dql,到目前为止,我认为条令没有一种选择随机行的方法。所以我想我有一个查询来获得行数 // pseudo code $count = SELECT COUNT(i) FROM Item i WHERE ... 然后使用PHP的随机偏移量进行实际查询,将其放入setFirstResult $item = (SELECT i FROM Item WHERE ...)->setMaxResults(1)->setFirstResult(rand(0, $count))->getSingl

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

// pseudo code
$count = SELECT COUNT(i) FROM Item i WHERE ...
然后使用PHP的随机偏移量进行实际查询,将其放入
setFirstResult

$item = (SELECT i FROM Item WHERE ...)->setMaxResults(1)->setFirstResult(rand(0, $count))->getSingleResult()
问题是,我的
rand()
是从0开始还是从1开始?那末呢
$count
$count-1

我在我的应用程序中使用:

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

从1开始计数,直到记录总数

无论从0还是从1开始,都必须分别以结束计数和计数-1为基础

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

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

资料来源:

我同意文件在这一点上不清楚。但是,我们可以看到条令\DBAL\Query\QueryBuilder是这样使用它的:

->modifyLimitQuery($query, $this->maxResults, $this->firstResult);
然后在条令\DBAL\Platforms\AbstractPlatform中转换为SQL:

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

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

对不起,这是什么意思?我想如果我使用0或1,肯定会有区别?是的,有区别,解释是按照自己的方式进行的..r8。。???因此,它取决于用途。这是否选择了一个随机行?还是说第一个结果从1开始?因此,要选择一个随机行,我需要执行
->setMaxResults(1)->setFirstResult(rand(1,$count))
?我的意思是,第一个结果是1,最后一个是总数。也许你误解了我的意思,我想要一个随机行