使用PHP随机从MySQL表列中提取数据

时间:2013-03-04 01:08:12

标签: php mysql

我正在使用以下内容(假设我已经计划在以后将这些更改为mysqli并且知道所使用的查询的不安全性),从MySQL表中的一列中的行中拉出文本字符串以及输出理想情况下,在浏览器中,该列是该列中随机选择的字符串:

mysql_connect($host,$username,$password); 
mysql_select_db($database) or die(mysql_error ()); 

$query="SELECT * FROM `tablename` ORDER BY RAND() LIMIT 0,1;";
$result=mysql_query($query);
$rows = array();
while($row = mysql_fetch_array($rs)) {
$rows[] = $row;
 }
mysql_close();
$max = count($rows) - 1;

使用以下echo线来实现浏览器中的最后一位:

echo $rows[rand(0, $max)][0] . " " . $rows[rand(0, $max)][1] . " " . $rows[rand(0, $max)][2] . " " . $rows[rand(0, $max)][3] . " " . $rows[rand(0, $max)][4]$
?>

我收到错误“PHP注意:第19行的script.php中未定义的偏移量:0”引用此回声线(诚然,它是从其他线程和教程拼凑而成的,因此我没有完全遵循)但是,我已经解决了所有其他记录和观察到的错误,所以如果可能的话,我如何修改它以使输出只是列中的一行(其中的文本)?

3 个答案:

答案 0 :(得分:3)

比使用RAND()

更快更好
$conn = mysqli_connect($host,$username,$password, $database);
if($conn->connect_errno > 0) {
  die('Unable to connect to database [' . $conn->connect_error . ']');
}

$total_rows = 20; //Generate Random number. You could get $total_rows with a first query counting all rows.
$selected_row = mt_rand(0, $total_rows);
//$selected_row -= 1; //just in case you randomized 1 - $total_rows and still need first row.

//Use the result in your limit.
$query="SELECT * FROM `tablename` LIMIT $selected_row, 1;";
$result=$conn->query($query);

while($row = $result->fetch_assoc()) {
  echo $row["columnname"];
}

mysql编辑到mysqli(即时)。如果你的桌子很大,你不会想要使用RAND()相信我!

答案 1 :(得分:1)

在您的SELECT语句中,您告诉数据库随机排序字符串。所以,只需获得第一个并回应它:

$row = mysql_fetch_array($rs)

echo $row['name_of_field_you_want_to_echo'];

答案 2 :(得分:1)

您永远不会定义变量$ rs。除此之外...

如果要从SQL查询中选择第一项,则无需同时指定limit和top。

$result = mysql_query("SELECT * FROM `tablename` ORDER BY RAND() LIMIT 1");

由于那将返回一行,您可以使用mysql_fetch_row

$row = mysql_fetch_row($result);

然后您可以使用

从该行获取字段
echo $row["column_name"];