mysql+php:选择多个随机结果

mysql+php:选择多个随机结果,php,mysql,random,Php,Mysql,Random,我一直在寻找这个有一段时间,但没有成功 我正在尝试实现一个推荐栏,例如在youtube中,当您看到一个视频时,它会在右侧显示列表或推荐的视频 此时此刻,我正在使用以下方法: $offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `$tablename` "); $offset_row = mysql_fetch_object($offset_result ); $offset = $of

我一直在寻找这个有一段时间,但没有成功

我正在尝试实现一个推荐栏,例如在youtube中,当您看到一个视频时,它会在右侧显示列表或推荐的视频

此时此刻,我正在使用以下方法:

$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `$tablename` ");
$offset_row = mysql_fetch_object($offset_result ); 
$offset = $offset_row->offset;
$result_rand = mysql_query( " SELECT * FROM `$tablename` LIMIT $offset, 9 " );
这很好,但有时不会显示任何结果,问题还在于它不是完全随机的,因为它显示第一个ID为200,因此下一个结果将是ID 201,然后是202,依此类推

我想知道是否有办法显示这9个randon结果,例如1º结果id 500、2º结果id 10、3º结果id 788等


谢谢

我不完全确定这是否符合您的要求,但请尝试:


$result\u rand=mysql\u querySELECT*FROM$表名。按兰特限额订购9件

您可以使用php rand函数创建5个数字并将其保存在数组中:

然后用foreach循环创建一个包含每个int的查询,并处理数据

<?php
foreach ($rand_array as $integer) {
     $q = "SELECT * from $tablename WHERE id='$integer';";
}
?>

这有帮助吗?

首先,您应该使用mysqli函数而不是mysql函数,因为。其次,使用order by rand获得随机行:

$rand_result = mysqli_query( "SELECT * FROM $tablename ORDER BY RAND() LIMIT 9;" );
未经测试:

选择id、@rownum:=@rownum+1作为rownum、name 从用户u, 选择@rownum:=0 r

这将为序列中的每一行提供一个唯一的编号。现在,如果您创建一个临时表,其中9个随机数介于表的1和count*之间,并将这两个随机数连接在一起


不确定性能,但似乎它可能比Rand和order by更快,因为我只需要9个随机数,但是请注意,如果您的表中有很多行,ORDER BY RAND可能需要一段时间来处理是的,我不想使用ORDER BY RAND,因为我的表会变得很大,这样会花费太多时间…@HogardelOcio-在这种情况下,您可能应该使用Angelo a代码的修改版本。我将获得表中记录的计数,然后生成一组ID以从数据库中选择。这还允许您拒绝其中一个随机ID,如果它与当前显示在页面上的ID相同。这是一个有趣的解决方案,但我的表中的ID有漏洞,因为我必须删除一些。有没有办法不计算不存在的ID?谢谢,我会根据我的需要添加它。
$rand_result = mysqli_query( "SELECT * FROM $tablename ORDER BY RAND() LIMIT 9;" );