繁体   English   中英

不使用ID返回随机行,MySQL

[英]Return a random row without using ID, MySQL

我正在寻找一种更好的方法来做到这一点:

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行)

SELECT * FROM $tbl_name WHERE 1 ORDER BY RAND() LIMIT 1;

20,000行并不是很多,以上应该足够快。

Juhana认为这本书是正确的:“ ORDER BY RAND()LIMIT 1”,当然20k并不是那么多。 其他选项将带有子选择:SELECT [fields] from myTable,(SELECT FLOOR(MAX(myTable.id)* RAND())AS myId from myTable)AS someRandId WHERE myTable.id = someRandId.randId

这里讨论(请避免在不需要时选择*)

在搜索了有关Adi发送的链接的评论之后,我找到了一个不错的解决方案。

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

似乎非常快而且非常随机!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM