显示随机的mysql记录 - PHP

时间:2012-12-07 00:38:34

标签: php html mysql

我试图从我的桌子上显示一条随机记录,但没有运气,这就是我所拥有的。这是用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

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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

答案 2 :(得分:0)

虽然通过RAND()订购会更好,但您的方法可行。你的问题是你试图回应出一个mysql结果集。您需要在代码之后执行以下操作:

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

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