Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Manera mas rapida

Estas en el tema de Manera mas rapida en el foro de Bases de Datos General en Foros del Web. Me gustaria que me dijesen la manera mas rapida de obtener: - En una base de datos de mysql tengo una tabla con 200.000 registros. ...
  #1 (permalink)  
Antiguo 07/04/2009, 16:35
 
Fecha de Ingreso: octubre-2008
Mensajes: 41
Antigüedad: 15 años, 7 meses
Puntos: 0
Manera mas rapida

Me gustaria que me dijesen la manera mas rapida de obtener:

- En una base de datos de mysql tengo una tabla con 200.000 registros. Un campo 'titulo' y otro campo 'votos'
- Quiero obtener los 20 registros mas votados

Pregunta: ¿Es necesario que extraiga los 200.000 registros y luego con php coja solo los que me interesan?

Agradecimientos
  #2 (permalink)  
Antiguo 07/04/2009, 19:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Manera mas rapida

Código SQL:
Ver original
  1. SELECT Titulo, Votos
  2. FROM (SELECT titulo, COUNT(*) Votos FROM TablaVotos GROUP BY votos) T1
  3. ORDER BY Votos DESC
  4. LIMIT 20;

El secreto está en saber qué cosas hace mejor la BB.DD. y qué cosas es preferible resolverlas por programación. Tienes que aprender usar la potencia del SQL para resolver este tipo de problemas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/04/2009, 01:19
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Manera mas rapida

Cada titulo aparece una sola vez en la tabla? ¿el campo votos contiene un número incremental?, si ese es el caso, la consulta no aplica.

Saludos

Última edición por matanga; 08/04/2009 a las 01:27 Razón: No entendi la pregunta...
  #4 (permalink)  
Antiguo 08/04/2009, 03:29
 
Fecha de Ingreso: octubre-2008
Mensajes: 41
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Manera mas rapida

Gracias!, me ha servido, pero tengo otra duda: Si ejecuto esta consulta:

SELECT titulo,votos FROM tabla1 ORDER BY votos DESC

¿Como obtener otro campo en la consulta que me indique la posición y que ese indicador sea único a pesar de que existan dos títulos con el mismo numero de votos?

Hasta ahora tengo esto, pero se repite si dos titulos tiene el mismo numero de votos:

SELECT a1.titulo, a1.votos, COUNT(a2.votos) ranking_votos
FROM tabla1 a1, tabla1 a2
WHERE a1.votos <= a2.votos or (a1.votos=a2.votos and a1.titulo = a2.titulo)
GROUP BY a1.titulo, a1.votos
ORDER BY a1.votos DESC, a1.titulo DESC;
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:26.