我试图从我的桌子上显示一条随机记录,但没有运气,这就是我所拥有的。这是用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
答案 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()速度产生任何问题。
正如迈克尔所说,你应该尝试在回显你认为是结果集之前获取结果。
答案 2 :(得分:0)
虽然通过RAND()订购会更好,但您的方法可行。你的问题是你试图回应出一个mysql结果集。您需要在代码之后执行以下操作:
$row = mysql_fetch_assoc($result_random);
echo $row['field1'] . " " . $row['field2'];
其中field1和field2是表格中列的名称。