crear una función para hacer esto muy probablemente la mejor respuesta y la respuesta más rápida aquí!
Pros - Funciona incluso con lagunas y extremadamente rápido.
<?
$sqlConnect = mysqli_connect('localhost','username','password','database');
function rando($data,$find,$max = '0'){
global $sqlConnect; // Set as mysqli connection variable, fetches variable outside of function set as GLOBAL
if($data == 's1'){
$query = mysqli_query($sqlConnect, "SELECT * FROM `yourtable` ORDER BY `id` DESC LIMIT {$find},1");
$fetched_data = mysqli_fetch_assoc($query);
if(mysqli_num_rows($fetched_data>0){
return $fetch_$data;
}else{
rando('','',$max); // Start Over the results returned nothing
}
}else{
if($max != '0'){
$irand = rand(0,$max);
rando('s1',$irand,$max); // Start rando with new random ID to fetch
}else{
$query = mysqli_query($sqlConnect, "SELECT `id` FROM `yourtable` ORDER BY `id` DESC LIMIT 0,1");
$fetched_data = mysqli_fetch_assoc($query);
$max = $fetched_data['id'];
$irand = rand(1,$max);
rando('s1',$irand,$max); // Runs rando against the random ID we have selected if data exist will return
}
}
}
$your_data = rando(); // Returns listing data for a random entry as a ASSOC ARRAY
?>
Por favor, tenga en cuenta este código como no se ha probado, pero es un concepto de trabajo para devolver las entradas al azar pese a los huecos .. Mientras que las diferencias no son lo suficientemente grande como para causar un problema de tiempo de carga.
posible duplicado de [MySQL seleccionar 10 filas aleatorias de 600K filas rápida] (http://stackoverflow.com/questions/4329396/mysql-select-10-random-rows-from-600k-rows-fast) –