Tôi có một cơ sở dữ liệu đầy đủ các hình ảnh và tôi muốn nhổ ra và hiển thị hai hình ảnh ngẫu nhiên. Mã này thực hiện đúng, nhưng tôi không tin rằng đó là cách tốt nhất để làm điều đó, đặc biệt nếu cơ sở dữ liệu cuối cùng sẽ có nhiều hàng. Tôi đã xem xét việc sử dụng hàm rand() của MySQL và giới hạn nó thành hai kết quả, nhưng từ những gì tôi đã đọc rand() tương đối chậm trên các cơ sở dữ liệu lớn. Một vấn đề khác là trong truy vấn cơ sở dữ liệu kép. Có cách nào tốt hơn để chọn hai hàng ngẫu nhiên bằng img_id?chọn hai hàng ngẫu nhiên trong cơ sở dữ liệu MySQL
img_id là hàng được tự động tạo nhưng không thể được giả định là liên tục.
//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'] . '" />';
}
bất kỳ đề xuất nào để làm cho truy vấn hiệu quả hơn?
Bạn đã thử nghiệm một truy vấn với 'trật tự bởi rand()' chống lại 3 câu hỏi bạn có bây giờ? Bằng cách này, bạn có thể làm cho mã hiện tại của bạn hiệu quả hơn bằng cách di chuyển câu lệnh 'preparation' ra khỏi vòng lặp, bạn chỉ cần chuẩn bị một lần. – jeroen
Và bạn có thể chọn hai hàng ngẫu nhiên trực tiếp từ '$ result', không cần phải tạo mảng mới với cùng giá trị ... – jeroen