首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php mySQL,按数字检索一行,将值存储为assoc.array

问php mySQL,按数字检索一行,将值存储为assoc.array
EN

Stack Overflow用户
提问于 2010-05-25 05:40:54
回答 3查看 2.8K关注 0票数 1

这一切都是新手,所以如果我以一种疯狂的方式来拼图,请告诉我!

我在mySQL数据库中有一个表,其中包含列title、hyperlink、imagelink

我希望php随机选择一行,然后能够将标题、超链接和图像链接保存为php变量。(这样我就可以将它们输出到html)

所以我可以做例如

psuedoey代码来理解这个想法

代码语言:javascript
复制
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等,找不到我需要的是哪一个:

到目前为止,我所拥有的是

代码语言:javascript
复制
// 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

第一次发帖,请多多关照,谢谢您的回复或解释!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-25 05:56:07

使用ORDER BY RAND() LIMIT 1是从较小的表中获取单行的一种不错的方法。使用这种方法的缺点是,必须为表中的每一行计算RAND(),然后必须对这个非索引值执行排序,以计算所需的行。随着表的增长,ORDER BY RAND()的效率会变得非常低。处理这种情况的更好方法是,首先获取表中行数的计数,计算要读取的随机行数,然后对SQL查询使用LIMIT [offest,] count选项:

代码语言:javascript
复制
$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行,从我们选取的随机数行开始。

票数 2
EN

Stack Overflow用户

发布于 2010-05-25 05:43:59

如果您想随机获取记录,您可以简单地修改您的sql查询,每次您将获得随机的记录排序,如果您只想获得一条随机记录,只需在您的查询和limit子句中添加order by rand():

代码语言:javascript
复制
$sql = "SELECT $number, $title, $hyperlink, $imagelink FROM $table
order by rand() limit 1";

完成后,您需要使用mysql_fetch_array或mysql_fetch_object等函数来实际获取行:

代码语言:javascript
复制
$data = mysql_query($sql, $link);

while ($row = mysql_fetch_array($data))
{
  echo $row['title'] . '<br />';
  echo $row['hyperlink'] . '<br />';
  echo $row['imagelink'] . '<br />';
}

通过以下方式:

代码语言:javascript
复制
$row = mysql_fetch_array($data)

您可以使用$row数组在页面的任何位置回显值,如下所示:

代码语言:javascript
复制
  echo $row['title'];
  echo $row['hyperlink'];
  echo $row['imagelink'];
票数 1
EN

Stack Overflow用户

发布于 2010-05-25 05:51:45

我认为如果你使用"limit“子句,它将会非常有效:

代码语言:javascript
复制
SELECT number, title, hyperlink, imagelink FROM $table order by rand() limit 1

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2900521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档