Ho un database pieno di immagini, e voglio sputare e visualizzare due immagini casuali. Questo codice lo fa correttamente, ma non sono convinto che sia il modo migliore per farlo, soprattutto se il database alla fine hanno molte più righe. Ho guardato in utilizzando la funzione di MySQL rand() e limitandolo a due risultati, ma da quello che ho letto rand() è relativamente lento su grandi basi di dati. Un altro problema riguarda la doppia query del database. C'è un modo migliore per selezionare due righe casuali da img_id?selezionare due file casuali nel database MySQL
img_id è una riga auto_incremented ma non può essere considerata costante.
//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'] . '" />';
}
qualche suggerimento per rendere la query più efficiente?
Avete provato una query con 'ordine da rand()' contro le 3 domande che hai adesso? Tra l'altro, è possibile rendere il codice più efficiente corrente spostando la dichiarazione 'prepare' fuori dal giro, è sufficiente per preparare una volta. – jeroen
ed è possibile selezionare due file casuali direttamente da '$ result', non c'è bisogno di generare un nuovo array con gli stessi valori ... – jeroen