php mySQL,按编号检索一行,将值存储为assoc.array

时间:2010-05-24 21:40:54

标签: php mysql arrays

这一切都很新,所以如果我以疯狂的方式谈论我的谜题,请告诉我!

我在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

第一次发帖,请好心,谢谢你的回复或解释!

3 个答案:

答案 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_arraymysql_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

为什么要为表名和字段名设置变量?