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

Atrancado con sentencia SQL con COUNT

Estas en el tema de Atrancado con sentencia SQL con COUNT en el foro de Mysql en Foros del Web. De nuevo he de solicitar ayuda pues estoy un poco (mucho) atrancado con lo siguiente. Para el supuesto este lo que implica: Tengo tres tablas. ...
  #1 (permalink)  
Antiguo 05/05/2015, 11:18
 
Fecha de Ingreso: enero-2008
Ubicación: Málaga - España
Mensajes: 346
Antigüedad: 16 años, 10 meses
Puntos: 13
Atrancado con sentencia SQL con COUNT

De nuevo he de solicitar ayuda pues estoy un poco (mucho) atrancado con lo siguiente.

Para el supuesto este lo que implica:
Tengo tres tablas.

PRODUCTOS
producto_id,fabricante,activo

FABRICANTES
id_fabricante,nombre

PRODUCTOS_A_SUBCATEGORIAS
subcategoria_id,producto_id


Con esta sentencia, saco un listado con el id_fabricante y nombre del fabricante de una relacion de productos que pertenecen a una determinada subcategoria, en este caso la 141. Todo correcto y perfecto me funciona, aunque no se si está optimizada la consulta o si se puede simplificar.

Código SQL:
Ver original
  1. SELECT fabricantes.id_fabricante,fabricantes.nombre FROM fabricantes
  2. WHERE fabricantes.id_fabricante IN
  3. (SELECT DISTINCT productos.fabricante FROM productos WHERE productos.producto_id IN
  4.     (SELECT DISTINCT productos_a_subcategorias.producto_id FROM productos_a_subcategorias
  5.     WHERE productos_a_subcategorias.subcategoria_ID = 141)
  6. AND productos.activo = TRUE)

Ahora lo que me gustaría es añadir a cada fila un COUNT de cuantos productos hay en cada fabricante. Y la verdad, no se ni por donde meterle mano
¿alguien puede orientarme un poco?
  #2 (permalink)  
Antiguo 06/05/2015, 15:12
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 15 años, 2 meses
Puntos: 3
Respuesta: Atrancado con sentencia SQL con COUNT

TAL COMO tu presentaste tus tablas una óptima query en mysql será:

Código MySQL:
Ver original
  1. select s.subcategoria_id Subcategoria, P.producto_id Producto, f.nombre Fabricante, COUNT(*) NumeroProductos from subcategoria S left join producto P on s.producto_id=p.producto_id
  2. left join fabricante F on p.id_fabricante=f.id_fabricante where s.subcategoria_id=141
  3. group by f.nombre;

La probé y sí funciona como tu lo pides. La parte donde dice 'group by f.nombre' permite que te presente en orden alfabético según el nombre dle fabricante, si pusieras 'group by f.id_fabricante' te presentaría lo mismo, pero en orden alfabético según la llave primaria del fabricante. Por cierto, en la tabla que muestras y que tiene de nombre PRODUCTOS asumo que la columna 'fabricante' realmente debería ser 'id_fabricante' eso sería lo correcto.

Éxitos y regale un puntito por el amor de Dios

Última edición por pancho2413; 06/05/2015 a las 15:18 Razón: Mejora en la presentación
  #3 (permalink)  
Antiguo 07/05/2015, 09:02
 
Fecha de Ingreso: enero-2008
Ubicación: Málaga - España
Mensajes: 346
Antigüedad: 16 años, 10 meses
Puntos: 13
Respuesta: Atrancado con sentencia SQL con COUNT

Así se ha quedado por ahora y hace justo lo que el cliente quiere.

Cada vez que un usuario entra en una categoria, sale un listado con los distintos fabricantres que hay en esa categoria y la cantidad de productos asociados al mismo.

GENIAL


Creo que yo lo estaba complicando demasiado con SELECT
MIL GRACIAS.

Código SQL:
Ver original
  1. SELECT f.nombre, f.id_fabricante, COUNT(*) NumeroProductos FROM productos_a_subcategorias S
  2. LEFT JOIN productos P ON
  3. s.producto_id=p.producto_id
  4. LEFT JOIN fabricantes F ON
  5. p.fabricante=f.id_fabricante WHERE s.subcategoria_id=" & subcategoria_id & " AND P.activo = TRUE AND f.nombre IS NOT NULL
  6. GROUP BY f.nombre

Etiquetas: count, select, sentencia, sql, tabla
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:57.