这一切都是新手,所以如果我以一种疯狂的方式来拼图,请告诉我!
我在mySQL数据库中有一个表,其中包含列title、hyperlink、imagelink
我希望php随机选择一行,然后能够将标题、超链接和图像链接保存为php变量。(这样我就可以将它们输出到html)
所以我可以做例如
psuedoey代码来理解这个想法
chosenNumber = randomNumber();
$chosenTitle = title[chosenNumber]
$chosenHyperlink = hyperlink[chosenNumber]
$chosenImagelink = imagelink[chosenNumber]
echo "<a href = $chosenTitle><img src= $chosenImagelink/> $chosenTitle </a>";我想我需要在这里使用这样的assoc数组,但我非常困惑,因为我找遍了各种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第一次发帖,请多多关照,谢谢您的回复或解释!
发布于 2010-05-25 05:56:07
使用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行,从我们选取的随机数行开始。
发布于 2010-05-25 05:43:59
如果您想随机获取记录,您可以简单地修改您的sql查询,每次您将获得随机的记录排序,如果您只想获得一条随机记录,只需在您的查询和limit子句中添加order by rand():
$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'];发布于 2010-05-25 05:51:45
我认为如果你使用"limit“子句,它将会非常有效:
SELECT number, title, hyperlink, imagelink FROM $table order by rand() limit 1为什么要为表名和字段名设置变量?
https://stackoverflow.com/questions/2900521
复制相似问题