【问题标题】:How to order results of a query randomly & select random rows. (MySQL)如何随机排序查询结果并选择随机行。 (MySQL)
【发布时间】:2011-04-08 12:31:34
【问题描述】:

请注意,我是这方面的初学者。

我有两个问题:

1) 如何随机排序查询结果。

示例查询:

$get_questions = mysql_query("SELECT * FROM item_bank_tb WHERE item_type=1 OR item_type=3 OR item_type=4");

2) 从表中选择随机行的最佳方法。所以假设我想从一个表中随机抓取 10 行。

非常感谢,

【问题讨论】:

  • 1) ord by rand() 但效率极低 2) limit rand(), 1; 效率更高,但一次只能随机一行。

标签: php mysql random


【解决方案1】:

如果您不介意为了选择速度而牺牲插入/更新/删除操作的复杂性,您始终可以添加一个序列号并确保它在插入/更新/删除时保持不变,然后无论何时执行选择,只需从该范围内选择一个或多个随机数。如果“序列”列被编入索引,我认为这将与您获得的一样快。

另一种方法是“洗牌”。添加一个序列列,在该列中插入随机值,每当您选择记录时,按序列列排序并将选定的记录序列更新为新的随机值。更新应该只影响您检索到的记录,因此成本不应该太高......但可能值得对您的数据集运行一些测试。

这可能是一个相当邪恶的说法,但我还是会说......是否需要显示“随机”数据?如果您尝试显示随机记录,您可能做错了什么。

想想亚马逊……他们是展示随机产品,还是展示流行的产品,以及“其他人在看到这个时购买的东西”。 SO是否会在此处为您提供随机问题列表或相关问题列表?只是一些思考的食物。

【讨论】:

  • 好吧,我有一个题库,我想从题库中随机选择 20 个问题,从而给每个学生一个独特的测试。
  • 你可能应该考虑有一个使用价值。每次显示问题时,将其“已使用”计数器增加 1,并使用“已使用”值最低的 20 个问题。这应该确保问题的均匀分布......如果你愿意,你可以在顶部添加一些随机性:)
  • 这是一个非常聪明的回复。
【解决方案2】:
SELECT * FROM item_bank_tb WHERE item_type in(1,3,4) order by rand() limit 10

注意 rand() 的排序在大型记录集上非常慢。

编辑。看看这篇非常有趣的文章,它提出了一种不同的方法。

http://explainextended.com/2009/03/01/selecting-random-rows/

【讨论】:

  • 是的,这就是我读到的,希望有人能提出更好的方法。
  • 我不知道比 Quassnoi 更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2010-10-18
  • 2018-10-04
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多