0

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

我正在尝试实现一个推荐栏,例如在 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 个随机结果,例如 1º 结果 id 500、2º 结果 id 10、3º 结果 id 788 等?

谢谢

4

4 回答 4

1

不完全确定这会回答您正在寻找的内容,但请尝试:

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

于 2012-10-24T00:58:34.497 回答
0

未经测试:

SELECT id, @rownum:=@rownum+1 AS rownum, name FROM users u, (SELECT @rownum:=0) r

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

不确定性能,但似乎它可能比 Rand 和 order by 更快,因为我只需要 9 个随机数

于 2012-10-24T01:49:34.520 回答
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);
}
?>

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

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

这有帮助吗?

于 2012-10-24T00:59:31.940 回答
0

首先你应该使用 mysqli_ 函数而不是 mysql_ 因为后者已被弃用。第二次使用 rand() 的 order 来获取随机行:

$rand_result = mysqli_query( "SELECT * FROM $tablename ORDER BY RAND() LIMIT 9;" );
于 2012-10-24T01:02:43.650 回答