我需要从6个随机记录中提取数据,但我遇到了一些麻烦

时间:2012-06-11 17:14:04

标签: php mysql

  

可能重复:
  Doing a while / loop to get 10 random results

我正在创建一个网站,人们可以上传他们拍摄或拍摄的有趣照片。每次加载主页时,都会从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。需要考虑的是,由于数据库的设置方式,我只能使用上面使用的技术获取随机记录。我怎么能这样做?

如果您有什么不确定的地方请说,我会尝试解释。另外,请解释您的解决方案。谢谢!!的 : - )

2 个答案:

答案 0 :(得分: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个文件名,并且可以为每个文件名进行图像检索。

答案 1 :(得分:-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;
    }

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