0

可能重复:
做​​一个while /循环以获得10个随机结果

我正在制作一个网站,人们可以上传他们拍摄或制作的有趣图片。每次加载主页时,从 MySQL 数据库中随机显示一张图片/记录到页面上。这是用...完成的

$filename = mysql_fetch_row(mysql_query("SELECT filename FROM pictures ORDER BY RAND() LIMIT 1"));
echo $filename[0];

这会将随机图片文件名回显到页面上。类似的东西funny_cat。但是我需要文件类型,以便我可以将图像回显到页面上。像这样...

while ($record = mysql_fetch_array(mysql_query("SELECT * FROM pictures WHERE p='$p'"))) {
    $filetype = $record["filetype"];
}
echo "<img src=\"picture/".$filename[0].".".$filetype."\" />";

一切都很好。

现在这是我正在努力的一点。我想在页面上显示 6 个其他随机较小的图片。所以我需要得到 6 条随机记录并filenamefiletype每条记录回显 and 。需要考虑的是,由于数据库的设置方式,我只能使用上面使用的技术获取随机记录。我怎么能这样做?

如果您有任何不确定的地方,请说出来,我会尽力解释。另外,请解释您的解决方案。谢谢!!:-)

4

2 回答 2

0

通过将查询的限制更改为 6 来检索随机列表的前 6 个结果。

$result = mysql_query("SELECT filename FROM pictures ORDER BY RAND() LIMIT 6")

然后,您可以调用 mysql_fetch_row 6 次来获取所有 6 个文件名。

$filenames = array();
while ($row = mysql_fetch_row($result)) {
    $filesnames[] = $row[0];
}

现在,您拥有全部 6 个文件名,您可以为每个文件名进行图像检索。

于 2012-06-11T17:20:51.753 回答
-1

如果我理解正确,您想“复制”随机提取 6 次。如果是这样,我会这样做:

for($i = 0; $i < 6; $i++){
   $filename = mysql_fetch_row(mysql_query("SELECT filename,filetype FROM pictures ORDER BY RAND() LIMIT 1"));
   $file =  $filename[0].'.'.$filename[1];
   echo "<img src=\"picture/".$file."\" />";
}

注意:如果要获取大量数据,请不要使用 rand 函数,而是在 php 中创建一个随机数组并获取相关 id。

编辑:

如果您想要一个检索 6 张不同的随机图片的解决方案(这样它们就不会重复自己),我会这样做:

$arr_ids = array();
    for($i = 0;$i < 6;$i++){
    $fresh_rand = rand()*$db_row_count;//$db_row_count the number of rows in the data base
     for($j=0;$j <count($arr_ids);$j++){
      if($fresh_rand == $arr_ids[$j]){
        $j =0;
         $fresh_rand = rand()*$db_row_count;
      }
     }
     $arr_ids[$i] = $fresh_rand;
    }

然后我将从数据库中获取 $arr_ids 数组中的 id。
我的解决方案很匆忙,所以请原谅我的不良做法,但我希望你明白你需要做什么。

于 2012-06-11T17:22:26.530 回答