Foros del Web » Programando para Internet » PHP »

Ordenar registro de manera Aleatoria

Estas en el tema de Ordenar registro de manera Aleatoria en el foro de PHP en Foros del Web. Hola amigos, quisiera saber que me podrían ayudar en una consulta. Tengo una base de datos de palabras de aproximadamente 30.000 Registros, en ciertas ocaciones ...
  #1 (permalink)  
Antiguo 19/06/2014, 18:50
 
Fecha de Ingreso: octubre-2010
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 10
Ordenar registro de manera Aleatoria

Hola amigos, quisiera saber que me podrían ayudar en una consulta.

Tengo una base de datos de palabras de aproximadamente 30.000 Registros, en ciertas ocaciones neccesito consultar de 1000 hasta 12.000 palabras en 1 consulta de manera aleatoria.

Actualmente utilizo

SELECT * FROM palabras ORDER BY RAND() Limit 6000

A pesar de que la consulta tarda bastante tiempo aparentemente no me devuelve lo resultados "Totalmente Aletarorios" ya que las palabras tienen un otro campo que se llama tipo y va de valores del 1 al 10. y cuando realizo la consulta, me sucede que el "tipo" ejemplo "5" lo veo como 4 veces seguidas. cosa que deberia ser muy dificil de salir ya que hay 10 diferentes tipos. y estoy consultando registros alateorios. y no solo eso. cada vez que prueblo el Programa siempre pasa.

Entones tenia otra duda. podria hacerlo con PHP utilizando lo siguiente

$rand = rand(0, $total_palabras-1);
y luego consuiltar el mensaje

SELECT * FROM palabras limit 1, $rand;


pero debido a que realizo mas de 10.000 Consultas no se si sea prudente utilizar esa opcion. o estoy bien con la que estoy usando actualmente, espero puedan ayudarme a resolver este tema Muchas Gracias. Saludos.
  #2 (permalink)  
Antiguo 19/06/2014, 19:09
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Ordenar registro de manera Aleatoria

Ni idea porque no obtienes una consulta totalmente aleatoria pero hacerlo con PHP de forma eficiente podria resultar si vuelcas toda la DB a memoria y haces las consultas ahi

(lo sugiero ya que veo que es una consulta "local")
__________________
Salu2!
  #3 (permalink)  
Antiguo 19/06/2014, 19:31
 
Fecha de Ingreso: octubre-2010
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 10
Respuesta: Ordenar registro de manera Aleatoria

Con volcar toda la DB a memoria te refieres a que pase todo a PHP?
  #4 (permalink)  
Antiguo 19/06/2014, 20:19
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Ordenar registro de manera Aleatoria

Si... tus tablas a arreglos...... eso es mas rapido pero claro debes tener memoria suficiente
__________________
Salu2!
  #5 (permalink)  
Antiguo 21/06/2014, 12:32
 
Fecha de Ingreso: octubre-2010
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 10
Respuesta: Ordenar registro de manera Aleatoria

Bueno estuve probando y no es muy conveniente volcal toda la base de datos al PHP y no no es una consulta local es parte de un programa pero realizo pruebas.

y creo que entiendo porque no me da resultados aleatorios. porque al poner Limit 1000 por ejemplo me revuelve los primeros 1000 resultados los cuales tienen siempre Tipo1.. quisiera saber que diferencia hay entre

ORDER BY RAND()

ORDER BY RAND(time() * time());

porque lei que asi puedes obtener un resultado supuestamente real.
  #6 (permalink)  
Antiguo 21/06/2014, 13:09
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Ordenar registro de manera Aleatoria

Pues time() no es funcion de Mysql y si haces:

Código PHP:
$sql "SELECT .............ORDER BY RAND(".time() * time().")" 

Ni idea que puedas obtener...... o sea.... ese RAND(time()*time()) te daria un numero pero creo te sirva para la clausula ORDER BY
__________________
Salu2!
  #7 (permalink)  
Antiguo 21/06/2014, 16:52
 
Fecha de Ingreso: octubre-2010
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 10
Respuesta: Ordenar registro de manera Aleatoria

Bueno, si tuviera que sacar un ejemplo 12.000 Registeros y obtener registros totalmente aleatorios podria utilizar esto

Código PHP:
Ver original
  1. $total_registros = ...***COUNT REGISTROS ***;
  2.  
  3. for($i=0;$i<=12000;$i++) {
  4. $random = rand(0, $total_registro-1);
  5.  
  6. $consulta = mysql_query("SELECT * FROM palabras limit ".$random.",1");
  7. $palabras[] = mysql_fetch_array($consulta);
  8.  
  9. }

de esta manera haria 12,000 Consultas para obtener resultados TOTALMENTE aleatorios.
  #8 (permalink)  
Antiguo 21/06/2014, 17:05
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Ordenar registro de manera Aleatoria

UFFFFFFFFFF.. 12.000 consultas y encima haciendo uso de RAND()

Pues ese servidor le va a decir "no mas"


Para eso mejor..... se trae TODOS los registros y extrae al azar 6.000 con PHP ... eso sera MUCHO mas eficiente si no son tantos registros (digamos 50.000 ?)
__________________
Salu2!
  #9 (permalink)  
Antiguo 21/06/2014, 17:37
 
Fecha de Ingreso: octubre-2010
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 10
Respuesta: Ordenar registro de manera Aleatoria

en este ultimo ejemplo no uso RAND().. mas bien es mi otra alternativa X3 pero no sabia entre cual elegir. ya que RAND no me los da totalmente aleatorios y este otro los registros son totalmente aleatorios pero podrian repetirse.

Creo que lo mas conveniente seria pasar mis 25.000 Registros a un array.. luego Usar "Shuffle()" de PHP para revolverlos y luego solo obtener los primero "6,000" o "12,000" registros que no son repetidos y son totalmente aleatorios, eso supongo que seria una buena alternativa,

Usted que opina?
  #10 (permalink)  
Antiguo 21/06/2014, 18:10
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Ordenar registro de manera Aleatoria

Pues... le decia que hiciera eso desde el principio: "vuelcas toda la DB a memoria y haces las 'consultas' ahi" pero la verdad no soy experto en DDBB y hay un foro especializado.

Por favor, muevan el tema a "bases de datos"
__________________
Salu2!
  #11 (permalink)  
Antiguo 21/06/2014, 19:05
 
Fecha de Ingreso: octubre-2010
Mensajes: 123
Antigüedad: 13 años, 5 meses
Puntos: 10
Respuesta: Ordenar registro de manera Aleatoria

Yo considero que el Tema deberia estar en ambos foros, ya que no solo estoy buscando la consulta si no alguna forma de hacerlo con PHP.
  #12 (permalink)  
Antiguo 21/06/2014, 19:27
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Ordenar registro de manera Aleatoria

Como quieras...... pero alla hay gente que sabe demasiado y tiene conocimientos de PHP tambien
__________________
Salu2!

Etiquetas: mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:42.