我正在寻找一种更好的方法:
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行)
答案 0 :(得分:4)
SELECT * FROM $tbl_name WHERE 1 ORDER BY RAND() LIMIT 1;
20,000行并不是那么多,上面应该足够快。
答案 1 :(得分:1)
Juhana是正确的书:“ORDER BY RAND()LIMIT 1”,当然20k并不是那么多。 其他选项将使用子选择: 选择[字段] 来自myTable, (SELECT FLOOR(MAX(myTable.id)* RAND())AS randId from myTable)AS someRandId 在哪里myTable.id = someRandId.randId
讨论了here (如果没必要,请避免选择*)
答案 2 :(得分:0)
在搜索了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
似乎非常快且非常随机!