0

重複
の可能性: while / loop を実行して 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 つのランダムなレコードを取得し、レコードごとにfilenameandをエコーする必要があります。filetype考慮する必要があるのは、データベースのセットアップ方法が原因で、上記で使用した手法ではランダムなレコードしか取得できないことです。どうすればこれを行うことができますか?

ご不明な点がございましたら、おっしゃってください。説明を試みます。また、あなたの解決策を説明してください。ありがとう!!:-)

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 に答える