如何随机排序查询结果&选择随机行。 (MySQL的)

时间:2011-04-08 12:31:34

标签: php mysql random

请注意我是初学者。

我有两个问题:

1)如何随机订购查询结果。

示例查询:

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

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

非常感谢,

2 个答案:

答案 0 :(得分:3)

如果你不介意牺牲选择上的插入/更新/删除操作的复杂性,你总是可以添加一个序列号,并确保它在插入/更新/删除时保持,然后每当你做一个选择,只需在此范围内选择一个或多个随机数。如果“序列”列被编入索引,我认为这与你得到的一样快。

另一种选择是“改组”。添加序列列,将随机值插入此列,每当您选择记录时,按顺序列排序并将选定的记录序列更新为新的随机值。更新应该只影响您检索到的记录,因此不应该太昂贵......但是可能值得针对您的数据集运行一些测试。

这可能是一个相当邪恶的事情,但无论如何我都会说......是否需要显示“随机”数据?如果你试图显示随机记录,你可能会做错事。

想想亚马逊......它们是展示随机产品,还是展示受欢迎的产品,以及“其他人在看到这些产品时购买的东西”。 SO会在此处为您提供随机问题列表,还是相关列表?只是一些值得思考的东西。

答案 1 :(得分:1)

SELECT * FROM item_bank_tb WHERE item_type in(1,3,4) order by rand() limit 10

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

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

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