gpt4 book ai didi

php - 使用 Doctrine 获取随机记录

转载 作者:可可西里 更新时间:2023-10-31 22:44:11 24 4
gpt4 key购买 nike

我想知道如何从一个组中获得随机数量的成员,但我不知道最好的方法是什么,而且我认为 ORDER BY RAND() 不是最好的或者,由于一个组可以有超过 100,000 个成员,执行这种类型的查询可能会非常慢。

我发现这种使用 SQL 的方法,但我不知道如何在 DQL 中做同样的事情:How can i optimize MySQL's ORDER BY RAND() function?

最佳答案

为了不降低性能,我通常会这样做:

//Retrieve the EntityManager first
$em = $this->getEntityManager();

//Get the number of rows from your table
$rows = $em->createQuery('SELECT COUNT(u.id) FROM AcmeUserBundle:User u')->getSingleScalarResult();

$offset = max(0, rand(0, $rows - $amount - 1));

//Get the first $amount users starting from a random point
$query = $em->createQuery('
SELECT DISTINCT u
FROM AcmeUserBundle:User u')
->setMaxResults($amount)
->setFirstResult($offset);

$result = $query->getResult();

当然,您将检索的 $amount 用户对象是连续的(即第 i 个,第 (i+1) 个,...,(i+ $amount)-th),但通常需要随机取一个或两个实体,而不是整个列表。因此,我认为这是一个有效的替代方案。

关于php - 使用 Doctrine 获取随机记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com