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

时间:2012-10-24 00:49:02

标签: php mysql random

我一直在寻找这个,但没有成功。

我正在尝试实施推荐栏,例如在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º结果id500,2º结果id10,3º结果id 788等等?

谢谢

4 个答案:

答案 0 :(得分:1)

不完全确定这会回答您的要求,但请尝试:

$result_rand = mysql_query("SELECT * FROM " . $tablename . " ORDER BY RAND() LIMIT 9");

答案 1 :(得分:0)

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

http://php.net/manual/en/function.rand.php

<?php
$rand_array = array();
for($i=1;$i<5;$i++) {
    $rand_array[$i] = rand(0,500);
}
?>

然后在每个int中使用foreach循环创建一个查询并使用您的数据。

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

这有帮助吗?

答案 2 :(得分:0)

首先你应该使用mysqli_ functions而不是mysql_,因为latter is deprecated。第二次使用rand()命令获取随机行:

$rand_result = mysqli_query( "SELECT * FROM $tablename ORDER BY RAND() LIMIT 9;" );

答案 3 :(得分:0)

UNTESTED:

SELECT id,@ rownum:= @ rownum + 1 AS rownum,name 来自用户你, (SELECT @rownum:= 0)r

这将按顺序为每一行提供一个唯一的编号。现在,如果您创建一个临时表,其中包含表格的1和count(*)之间的9个随机数,并将这两个一起加入......

不确定性能,但似乎它可能比兰德和订单更快,因为我只需要9个随机数