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

Ayudaa con una consulta

Estas en el tema de Ayudaa con una consulta en el foro de Mysql en Foros del Web. Tengo la tabla productos que tiene 2 campos (nombre, categoria_id) y la tabla categorias tambien con 2 campos (id, nombre). Lo que quisiera lograr es ...
  #1 (permalink)  
Antiguo 21/09/2012, 07:50
 
Fecha de Ingreso: abril-2012
Mensajes: 79
Antigüedad: 12 años
Puntos: 0
Ayudaa con una consulta

Tengo la tabla productos que tiene 2 campos (nombre, categoria_id) y la tabla categorias tambien con 2 campos (id, nombre).
Lo que quisiera lograr es listar las N categorias que contengan más productos


No pido la consulta hecha sino alguna idea de los operadores a utilizar, gracias desde ya.
  #2 (permalink)  
Antiguo 21/09/2012, 08:27
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: Ayudaa con una consulta

Es una consulta simple: Realizas un INNER JOIN entre ambas, agrupando por categoría, de mayor a menor, y usas LIMIT para determinar cuántas te devuelve.
Si lo que quieres es que te devuelva las que que tengan un mínimo de X productos, deberás usar HAVING COUNT(*) >= X, donde X es un entero.
__________________
¿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 21/09/2012, 09:21
 
Fecha de Ingreso: abril-2012
Mensajes: 79
Antigüedad: 12 años
Puntos: 0
Respuesta: Ayudaa con una consulta

Gracias gnzsoloyo, de momento esto es lo que pude lograr

Código MySQL:
Ver original
  1. select categorias.nombre,productos.id
  2.     from categorias
  3.         inner join products on productos.categoria_id=categorias.id GROUP BY(productos.categoria_id) DESC LIMIT 0,5

Me muestra 5 categorias pero no son precisamente las que tienen mas productos
  #4 (permalink)  
Antiguo 21/09/2012, 09:41
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: Ayudaa con una consulta

Código MySQL:
Ver original
  1. SELECT nombre, id, TotalProductos
  2. FROM (SELECT C.nombre, C.id, COUN(*) TotalProductos
  3.     FROM categorias C INNER JOIN products P ON C.id = P.categoria_id
  4.     GROUP BY C.id) T1
  5. ORDER BY TotalProductos DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 21/09/2012, 09:58
 
Fecha de Ingreso: abril-2012
Mensajes: 79
Antigüedad: 12 años
Puntos: 0
Respuesta: Ayudaa con una consulta

Vaya, no estaba ni cerca, muchas gracias.
  #6 (permalink)  
Antiguo 21/09/2012, 10:04
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: Ayudaa con una consulta

Por nada. El problema de estos casos es que MySQL tiene un comportamiento singular respecto a los GROUP BY y ORDER BY, a causa de que te deja agrupar por campos que no se listan en el SELECT a diferencia de otros DBMS.
Una Fe de Erratas: COUNT() mal escrito.
Código MySQL:
Ver original
  1. SELECT nombre, id, TotalProductos
  2. FROM (SELECT C.nombre, C.id, COUNT(*) TotalProductos
  3.     FROM categorias C INNER JOIN products P ON C.id = P.categoria_id
  4.     GROUP BY C.id) T1
  5. ORDER BY TotalProductos DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: tabla, campos
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 22:18.