当前位置: 首页 > 面试题库 >

如何用学说随机选择

诸葛卜霸
2023-03-14
问题内容

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

$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,我想获得符合条件的随机行,我在查询中使用rand()的顺序。

我发现这个类似的问题基本上表明,由于在理论中不支持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();

对于这是否可以帮助我解决在缺乏随机支持的情况下的工作,我有些困惑。我无法在setMaxResult之后添加偏移量。

知道如何实现吗?


问题答案:

Doctrine团队不愿意实施此功能。

有几种解决方案,每种都有其缺点:

  • 添加一个自定义数字函数:请参见此DQL RAND()函数
    (如果您有很多匹配的行,可能会很慢)

  • 使用本机查询 (我个人试图避免这种解决方案,但我发现这种解决方案难以维护)

  • 首先发出原始SQL查询以随机获取一些ID,然后WHERE x.id IN(?)通过将ID数组作为参数传递,使用DQL 加载关联的对象。 该解决方案涉及两个单独的查询,但 可能会 比第一个解决方案具有更好的性能(不ORDER BY RAND()存在其他原始SQL技术,在此不做详细介绍,您可以在该网站上找到一些不错的资源)。



 类似资料:
  • 我在用数学。函数获取从0到“max”数字范围内的整数。但据sonarqube称,这是“安全热点”的媒介问题。

  • 问题内容: 这是我的表结构。在这里我想随机选择4行,所以我在查询中使用RAND()mysql函数,我的问题是 如何配对到行。我的意思是,我想始终选择pid 2和3。我需要按以下顺序。 我不想打破对A2 A3 或或或等 我使用下面的查询,但对我不起作用 问题答案: turbod与他的答案很接近,他只是随机排序,当您似乎想要按pid排序时,在获得所需的随机行以及与A2和A3有关的行之后:

  • 问题内容: 我正在使用MSSQL Server2005。在我的数据库中,我有一个表“ customerNames”,其中有两列“ Id”和“ Name”以及大约。1,000个结果。 我正在创建一个功能,每次必须随机选择5个客户。谁能告诉我如何创建一个查询,该查询每次执行查询时都会随机获得5行(Id和Name)? 问题答案: 也就是说,似乎每个人都可以访问此页面,以获取对您的问题的更一般的答案: 在

  • 微调器板条箱有一个枚举,其中包含大量可能的微调器。 这是枚举(跳过除顶部和底部4之外的所有值): 新微调器易于创建: 但是,我希望随机选择一个微调器,这是行不通的: 因为: 如何随机选择枚举值,并使用该值显示随机微调器?

  • 我正在编写一个二十一点游戏。我有一个所有可用牌类型的枚举。交易时,我想使用Random从枚举中随机选择一张牌给玩家。如何使用整数值对应枚举值?或者,我如何为该枚举的变量随机选择枚举值? 纸牌Enun:

  • 问题 你想从一个序列中随机抽取若干元素,或者想生成几个随机数。 解决方案 random 模块有大量的函数用来产生随机数和随机选择元素。 比如,要想从一个序列中随机的抽取一个元素,可以使用 random.choice() : >>> import random >>> values = [1, 2, 3, 4, 5, 6] >>> random.choice(values) 2 >>> random