1

我试图从我的桌子上显示一条随机记录,但没有运气,这就是我所要做的。这是用 PHP 编码的

$range_result = mysql_query("SELECT MAX() AS max_id , MIN() AS min_id FROM pages");
$range_row = mysql_fetch_object( $range_result ); 
$random = mt_rand($range_row->min_id , $range_row->max_id);
$result_random = mysql_query( "SELECT * FROM pages WHERE id >= $random LIMIT 0,1");
echo $result_random;

想知道这是否是一个明显的错误?我已经很好地连接到数据库。

JB

4

3 回答 3

5

您应该使用具有mysqli_multi_query性能的直接 SQL 来执行此操作:

// First query gets the random ID, second gets the associated row
$sql = "SELECT @id:=FLOOR(RAND()*(MAX(id) - MIN(id))) + MIN(id) FROM pages; 
        SELECT * FROM pages WHERE id = @id;"

// Create a mysqli object and execute the multi-query
$mysqli = new mysqli($host, $user, $pass, $db_name);
$mysqli->multi_query($sql);
$result = $mysqli->store_result();

// Grab the first row from the first resultset
if ($row = $result->fetch_assoc()) {
    print_r($row);
}
于 2012-12-07T00:40:15.070 回答
1

为什么不直接使用 rand():

"SELECT * FROM pages ORDER BY RAND() Limit 1"

但要回答,如果未定义,MIN 和 MAX 选择什么?您是否应该尝试:

"SELECT MAX(`id`) AS max_id , MIN(`id`) AS min_id FROM pages"

而且我认为您不需要限制中的偏移量。所以只有 LIMIT 1 可能就可以了。

正如评论所述,对于较大的数据集,RAND() 可能会很慢,但在许多情况下,这不是问题,并且延迟很小,除非您拥有大量数据。阅读 frank 的链接以查看详细信息。不过,就我个人而言,我从来没有真正遇到过 RAND() 速度的问题。

正如迈克尔所说,您可能应该在回应您认为的结果集之前尝试获取结果。

此外,不推荐使用 mysql_ 函数。您应该切换到mysqliPDO

于 2012-12-07T00:39:48.417 回答
0

虽然通过 RAND() 订购会更好,但您的方法会起作用。你的问题是你试图回显一个 mysql 结果集。你需要在你的代码之后做这样的事情:

$row = mysql_fetch_assoc($result_random);
echo $row['field1'] . " " . $row['field2'];

其中 field1 和 field2 是表中列的名称。

于 2012-12-07T00:44:29.697 回答