以下是我如何查询数据库中的一些单词:
$query = $qb->select('w')
->from('DbEntities\Entity\Word', 'w')
->where('w.indictionary = 0 AND w.frequency > 3')
->orderBy('w.frequency', 'DESC')
->getQuery()
->setMaxResults(100);
我正在使用MySQL,并想获取符合特定条件的随机行,我会在我的查询中使用order by rand()。我找到了类似的问题(链接),其中建议由于Doctrine不支持ORDER BY RAND,因此可以随机化主键。但是,在我的情况下无法这样做,因为我有一个搜索条件和where子句,因此并非每个主键都满足该条件。
我还发现了一个代码片段,建议您使用OFFSET来随机排列行,如下所示:
$userCount = Doctrine::getTable('User')
->createQuery()
->select('count(*)')
->fetchOne(array(), Doctrine::HYDRATE_NONE);
$user = Doctrine::getTable('User')
->createQuery()
->limit(1)
->offset(rand(0, $userCount[0] - 1))
->fetchOne();
我有点困惑这是否可以帮助我解决在我的情况下缺乏order by random支持的问题。我无法在设置setMaxResult之后添加偏移量。
有任何想法如何实现吗?
ORDER BY
。应该像这样写:SELECT w, RAND() AS r FROM Word w ORDER BY r
。 - BenMorel$em->getConnection()->query('SELECT id FROM table ORDER BY RAND()');
然后获取这些id,并将其作为参数传递给DQL查询的数组。 - BenMorel