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,最后一个是总数。也许你误解了我的意思,我想要一个随机行