到目前为止,我认为学说没有选择随机行的方法。所以我想我有一个查询来获取行数
// pseudo code
$count = SELECT COUNT(i) FROM Item i WHERE ...
然后有一个真正的查询来使用放入setFirstResult
$item = (SELECT i FROM Item WHERE ...)->setMaxResults(1)->setFirstResult(rand(0, $count))->getSingleResult()
问题是,我的rand()
是从0还是1开始?那么结束? $count
或$count-1
?
答案 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