我一直在寻找这个,但没有成功。
我正在尝试实施推荐栏,例如在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等等?
谢谢
答案 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个随机数