2011-11-20 18 views
10

Deseo solicitar 5 filas aleatorias de mi tabla SQL usando php. por ejemplo, necesito:Seleccionar una fila aleatoria de SQL usando PHP

mysql_query("SELECT * FROM catalogue >> not sure what goes here << LIMIT 5"); 
+4

¿No observas temas relacionados con exactamente la misma pregunta? –

Respuesta

19
SELECT * FROM catalogue order by RAND() LIMIT 5 

Editar:

Por lo que su valor, Tenga en cuenta que el uso de rand() sobre una mesa con un gran número de filas va a ser lento. Esto puede bloquear tu servidor.

Algunos Solución:

MediaWiki utiliza un truco interesante (para especial de Wikipedia: Random función): la mesa con los artículos tiene una columna adicional con un número aleatorio (genera cuando se crea el artículo). Para obtener un artículo al azar, genere un número aleatorio y obtenga el artículo con el siguiente valor más grande o más pequeño (no recuerdo cuál) en la columna de números aleatorios. Con un índice, esto puede ser muy rápido. (Y MediaWiki está escrito en PHP y desarrollado para MySQL.)

Pero esto es solo para una sola fila al azar.

+0

¿Es bueno usar algo como ... SELECCIONAR * DEL catálogo WHERE user_type = 'normal' ordenar por RAND() LIMIT 5 ???? –

+0

@GuchoCa, sí que estará bien. Una vez que crezca el tamaño de su mesa y empiece a notar un gran tiempo dedicado a esta consulta, tendrá que idear métodos para reducirla, al igual que MediaWiki. – Pheonix

+0

¿qué pasa con la longitud de la tabla (como comprobar cuántos registros tiene la tabla y permite suponer 500K, que es una gran cantidad de registros), entonces simplemente elija aleatoriamente 5 números de ese total y luego extraiga esos 5 registros de la tabla ? – Ali

5

Suponiendo que la tabla tiene auto del incremento en usted podría conseguir el mayor identificación con

SELECT id FROM catalogue ORDER BY id DESC LIMIT 1 

y el ingenio de ID más pequeño h

SELECT id FROM catalogue ORDER BY id ASC LIMIT 1 

por lo que es posible hacer esto

$randomId = mt_rand($smallestId, $biggestId); 
$randomSql = mysql_query("SELECT * FROM catalogue WHERE id='$randomId'"); 

Durante cinco filas que podría crear el ID aleatorio cinco veces.

+0

si ese ID aleatorio falta, sin embargo, la consulta fallará – warren

Cuestiones relacionadas