Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 返回一个不使用ID MySQL的随机行_Php_Mysql_Database_Random - Fatal编程技术网

Php 返回一个不使用ID MySQL的随机行

Php 返回一个不使用ID MySQL的随机行,php,mysql,database,random,Php,Mysql,Database,Random,我正在寻找一种更好的方法: 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

我正在寻找一种更好的方法:

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;
20000行并不是那么多,上面的应该足够快了


20000行并不是那么多,上面的速度应该足够快。

Juhana的说法是正确的:按兰特限购1,当然20k也不是那么多。 其他选项将与子选择一起使用: 选择[字段] 从myTable中, 从myTable AS someRandId中选择FLOORMAXmyTable.id*RAND AS randId 其中myTable.id=someRandId.randId

讨论
请避免在不必要的时候选择*

Juhana的做法是正确的:按兰特订购限制1,当然20k不是那么多。 其他选项将与子选择一起使用: 选择[字段] 从myTable中, 从myTable AS someRandId中选择FLOORMAXmyTable.id*RAND AS randId 其中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


看起来很快很随机

通过搜索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


看起来很快很随机

我要补充的是,这是一个高流量网站上使用的,所以速度很重要。在搜索了Adi发送的链接上的评论后,我找到了一个不错的解决方案。选择*FROM$tbl_name T JOIN选择CEILMAXID*RAND AS ID FROM$tbl_name AS x ON T.ID>=x.ID LIMIT 1;资料来源:似乎非常快而且非常随机获取数据库中的行数-事实上,您选择的不是行数,而是此查询中的所有行。Go Figure只是补充一下,这是一个高流量的网站,所以速度很重要。通过搜索Adi发送的链接上的评论,我找到了一个不错的解决方案。选择*FROM$tbl_name T JOIN选择CEILMAXID*RAND AS ID FROM$tbl_name AS x ON T.ID>=x.ID LIMIT 1;资料来源:似乎非常快而且非常随机获取数据库中的行数-事实上,您选择的不是行数,而是此查询中的所有行。去图我试过你的查询,结果很好,但似乎不是很随机,我每10个左右的查询都会得到相同的结果。我试过你的查询,结果很好,但似乎不是很随机,我每10个左右的查询都会得到相同的结果。所以,它比按兰德排序更随机?是的,当使用rand时,它会更频繁地返回接近0的结果,并且我每10次左右的查询都会收到相同的结果。它使用的是相同的rand函数。看来你弄错了,所以,它比按兰德排序更随机?是的,当使用兰德时,它返回的结果更接近0,并且我每10次左右的查询都会收到相同的结果。它使用相同的兰德函数。看来你弄错了