我有一個數據庫充滿了圖像,我想吐出並顯示兩個隨機圖像。這段代碼正確地做了,但我不相信這是最好的方法,特別是如果數據庫最終會有很多行。我研究過使用MySQL的rand()函數並將其限制爲兩個結果,但從我讀取的rand()在大型數據庫上相對較慢。另一個問題是在雙重數據庫查詢中。有沒有更好的方法通過img_id選擇兩個隨機行?在MySQL數據庫中選擇兩個隨機行
img_id是一個auto_incremented行,但不能被認爲是連續的。
//get all image ids
$query = $conn->prepare('SELECT img_id FROM images');
$query->execute();
$result = $query->fetchAll();
//create an array in which to put all the ids
$list_imgs = array();
//put the ids into the array to search over
for ($x=0; $x < count($result); $x++) {
array_push($list_imgs, $result[$x]['img_id']);
}
//output two random images
for ($x=0; $x < 2; $x++) {
//create random index for search
$rand = array_rand($list_imgs);
//query to select one image
$query = $conn->prepare('SELECT title, file_loc FROM images WHERE img_id=?');
//random index value in array of img_ids
$query->execute(array($list_imgs[$rand]));
$result = $query->fetchAll();
echo 'title:' . $result[0]['file_loc'] . '<br /><img src="' . $result[0]['file_loc'] . '" />';
}
任何建議,使查詢更有效率?
有你在蘭德測試用'爲了一個查詢()'對3個詢問你現在有嗎?順便說一句,您可以通過將'prepare'語句移出循環來使當前代碼更高效,您只需要準備一次。 – jeroen
你可以直接從'$ result'中選擇兩個隨機行,不需要生成一個具有相同值的新數組... – jeroen