|
|
|
mysql |
Recientemente se me ocurrió una idea, estoy seguro de no ser el primero en utilizarla, pero a los coders a ver qué les parece.
Problema: tengo una tabla en una base de datos, indizada con un entero autoincrementable, pero tiene varias características a considerar:
- el id, no necesariamente empieza en 1
- los id's son discontinuos (por ejemplo, del id 740 sigue el 768, estando vacios los id's 741-767)
Teniendo en cuenta esto, quiero sacar uno o varios registros aleatoriamente. Supongamos que queremos los campos "nombre" y "mail".
Solución viable ineficiente (la he visto más de alguna vez):
1.- select id from tabla y meterlos a un arreglo llamado $ids
2.- $id_rand = ids[rand(0,count($ids))], además que no me termina de gustar el rand() de PHP
3.- select nombre, mail from tabla where id = $id_rand
Solución eficiente:
1.- select nombre, mail, rand() as a from tabla [where...] order by a limit 0,n, donde n es el número de registros aleatorios que queremos (1, 2, ...)
Y ya, en un solo paso tenemos los registros aleatorios que gustemos, en vez de tener que traer los id's, insertarlos a un arreglo gastando memoria de a gratis. Además los problemas de discontinuidad valen madres.
|
| |
EnvÌa a:
del.icio.us
enchÌlame
|
-- ¿Qué es esto?
Estás leyendo el blog (o bitácora)
personal de beco, en donde periódicamente
escribo cualquier cantidad de tonterías
que me interesan, sobre todo de internet, matemáticas, fotografía, algo de código y muchas, muchas pendejadas.
Puedes buscar, saltar,
revisar las categorías
o quitar el polvo de los archivos cronológicamente ordenados.
Puedes suscribirte a los nuevos contenidos de este sitio via
RSS agregando esta
liga  a tu lector preferido de feeds, o si
lo prefieres, puedes suscribirte agregando aqui tu dirección de correo electrónico para que te lleguen
automáticamente las actualizaciones. Puedes dejar tu dirección de correo tranquilo, créeme, aqui
odiamos el spam.
M + 116
|
| |
|
|