这一切都很新,所以如果我以疯狂的方式谈论我的谜题,请告诉我!
我在mySQL数据库中有一个表,其中包含列标题,超链接,imagelink
我想让php随机选择一行,然后能够将标题,超链接和imagelink保存为php变量。 (所以我可以将它们输出到html中)
所以我可以拥有例如
psuedoey代码以获得想法
chosenNumber = randomNumber();
$chosenTitle = title[chosenNumber]
$chosenHyperlink = hyperlink[chosenNumber]
$chosenImagelink = imagelink[chosenNumber]
echo "<a href = $chosenTitle><img src= $chosenImagelink/> $chosenTitle </a>";
我想我需要在这里使用这样的关联数组,但我很困惑,因为我查看了各种php mySQL fetch_assoc fetch_row等,无法找到哪一个做我需要的:(
到目前为止我所拥有的是
// database table name information
$number = "number";
$title = "title";
$hyperlink = "hyperlink";
$imagelink = "imagelink";
// sql to select all rows of adverts
$sql = "SELECT $number, $title, $hyperlink, $imagelink FROM $table";
//execute the sql
$data = mysql_query($sql, $link);
//count the number of rows in the table
$bannerCount = mysql_num_rows($data);
//generate a random number between 0 and the number of rows
$randomNumber = mt_rand(0, $bannerCount); //do I need to do bannerCount-1 or similar here?
$chosenNumber = $randomNumber;
//select data from a random row
第一次发帖,请好心,谢谢你的回复或解释!
答案 0 :(得分:2)
使用ORDER BY RAND() LIMIT 1
是从较小的表中获取单行的一种不错的方法。使用此方法的缺点是必须为表中的每一行计算RAND()
,然后必须对此非索引值执行排序以计算所需的行。随着你的桌子的增长,ORDER BY RAND()
变得非常低效。处理此问题的更好方法是首先获取表中行数的计数,计算要读取的随机行数,并在SQL查询中使用LIMIT [offest,] count
选项:
$sql = "SELECT COUNT(*) as rows FROM $table"
$res = mysql_query($sql);
if (!$row = mysql_fetch_assoc($res)) {
die('Error Checking Rows: '.mysql_error());
}
$rows = $row['rows'];
// now that we know how many rows we have, lets choose a random one:
$rownum = mt_rand(0, $rows-1);
$sql = "SELECT number, title, hyperlink, imagelink FROM $table LIMIT $rownum,1";
$res = mysql_query($sql);
$row = mysql_fetch_assoc($res);
// $row['number'] $row['title'] etc should be your "chosen" row
第一个查询询问SQL Server有多少行可用,然后LIMIT
实际查询的结果集只返回1行,从我们选择的随机数行开始。
答案 1 :(得分:1)
如果你想随机获取记录,你可以简单地修改你的sql查询,每次你得到记录的随机排序,只需要order by rand()
添加到你的查询和limit
子句,如果你想得到一个随机记录:
$sql = "SELECT $number, $title, $hyperlink, $imagelink FROM $table
order by rand() limit 1";
完成后,您需要使用mysql_fetch_array
或mysql_fetch_object
等函数来实际获取行:
$data = mysql_query($sql, $link);
while ($row = mysql_fetch_array($data))
{
echo $row['title'] . '<br />';
echo $row['hyperlink'] . '<br />';
echo $row['imagelink'] . '<br />';
}
使用:
$row = mysql_fetch_array($data)
您可以随时使用$row
数组来回显页面任意位置的值:
echo $row['title'];
echo $row['hyperlink'];
echo $row['imagelink'];
答案 2 :(得分:1)
我认为如果你使用“限制”条款,它会非常有效:
SELECT number, title, hyperlink, imagelink FROM $table order by rand() limit 1
为什么要为表名和字段名设置变量?