gpt4 book ai didi

php - 如何用教义随机选择

转载 作者:IT王子 更新时间:2023-10-29 01:06:19 26 4
gpt4 key购买 nike

这是我在数据库中查询某些单词的方法

$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()。

我找到了 this similar基本上建议的问题,因为 ORDER BY RAND 在教义中不受支持,您可以改为随机化主键。但是,在我的情况下无法做到这一点,因为我有一个搜索条件和一个 where 子句,因此并非每个主键都满足该条件。

我还找到了 code snippet这建议您使用 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();

我有点困惑,这是否会帮助我解决在我的情况下缺乏对随机排序的支持的问题。我无法在 setMaxResult 之后添加偏移量。

知道如何实现吗?

最佳答案

学说团队 is not willing to implement this feature .

您的问题有多种解决方案,每种都有自己的缺点:

  • 添加 custom numeric function :看这个DQL RAND() function
    (如果您有很多匹配行,可能会很慢)
  • 使用 native query
    (我个人尽量避免这种解决方案,我发现它很难维护)
  • 首先发出原始 SQL 查询以随机获取一些 ID,然后通过将 ID 数组作为参数传递,使用 DQL WHERE x.id IN(?) 加载关联对象。
    此解决方案涉及两个单独的查询,但可能比第一个解决方案提供更好的性能(存在除 ORDER BY RAND() 之外的其他原始 SQL 技术,我不会在这里详细说明) ,您会在此网站上找到一些很好的资源)。

关于php - 如何用教义随机选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762538/

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