如何对查询结果进行随机排序&选择随机行.(MySQL)


How to order results of a query randomly & select random rows. (MySQL)

请注意,我是初学者。

我有两个问题:

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

示例查询:

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

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

许多谢谢,

如果你不介意牺牲插入/更新/删除操作的复杂性来换取选择的速度,你可以总是添加一个序列号,并确保它在插入/更新/删除时保持不变,然后每当你做一个选择,简单地从这个范围内选择一个或多个随机数。如果"sequence"列被索引,我认为这是最快的速度。

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

这可能是一个相当邪恶的事情,但我还是要说…是否有必要显示"随机"数据?如果你试图显示随机记录,你可能做错了什么。

想想亚马逊…他们是展示随机产品,还是展示受欢迎的产品,以及"其他人看到这个时买的东西"。SO给你的是一个随机问题的列表,还是一个相关问题的列表?

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/