【发布时间】:2012-04-21 20:20:34
【问题描述】:
我正在寻找更好的方法:
SELECT * FROM $tbl_name WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM $tbl_name ) ORDER BY id LIMIT 1;
它很慢而且不是很随机,我每 10 个左右的查询都会得到相同的结果。
这会从表中选择一个随机行,而不考虑其 ID。
到目前为止,我有这个:
// Get amount of rows in database
$result = mysql_query("SELECT * FROM $tbl_name");
$num_rows = mysql_num_rows($result);
// Generate random number
$random_row = rand(1, $num_rows);
但我不知道如何获得某一行。
我不是这个意思
SELECT * FROM $tbl_name WHERE id = $random_row
因为我的数据库在 ID 列中有间隙,所以有时会失败。
有没有人有脚本可以从 MySQL 数据库中获取随机结果而无需回复 ID 并且速度非常快? (数据库包含大约 20000 行)
【问题讨论】:
-
补充一下,这个是在高流量网站上使用的,所以速度很重要。
-
在搜索了 Adi 发送的链接上的 cmets 后,我找到了一个不错的解决方案。 SELECT * FROM $tbl_name T JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM $tbl_name) AS x ON T.ID >= x.ID LIMIT 1;来源:wanderr.com/jay/order-by-slow/2008/01/30 好像非常快,非常随机!
-
// Get amount of rows in database- 事实上,您选择的不是数量,而是使用此查询的所有行。去图