class ImageRepository extends EntityRepository
{
public function findAllNewestByVotes()
{
return $this->getEntityManager()
->createQuery(
'SELECT p FROM GabrielUploadBundle:Image p WHERE p.upvotes > 50 ORDER BY p.createdAt ASC')
->getResult();
}
}
我只需要来自 GabrielUploadBundle:Image 的 10 到 20 张随机图片,其中点赞数超过 50,目前仅按日期 (createdAt) 排序。 我知道这可以用 RAND() 来解决,但不建议将其用于大型表。
最佳答案
我将通过以下四个步骤来完成此操作:
选择得票数超过50的所有记录的ID
打乱数组
将数组切片为您需要的大小
使用您在带有 IN 子句的新 select 中获得的 ID
关于mysql - 如何优化查询以查找大型表的随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089138/