Ir al contenido


Foto

Ayunda con conteo de registros en una consulta de dos tablas


  • Por favor identifícate para responder
5 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 27 febrero 2009 - 04:49

Pues eso, tengo la siguiente consulta:



sql
  1. SELECT c.cat_id, c.categoria, COUNT(n.categoria) AS total FROM articulo n, categorias c WHERE c.cat_id = n.categoria
  2. GROUP BY c.cat_id, c.categoria ORDER BY c.categoria ASC



Pero no me da el resultado esperado, les explico, tengo dos tablas (articulo y categorias), estoy haciendo un listado de categorias y que me muestre el total de articulos ligado a cada categoria, ejemplo:



delphi
  1. Libros (5) // hay 5 articulos ligado a esta categoria y asi sucesivamente...
  2. Mascotas (1)
  3. Lapices (1)



hasta ahi bien, el problema es el siguiente, suponiendo que tengo tres categorias y dos de ellas tienen articulos ligados, no me muestran todas las categorias, ejemplo:



delphi
  1. Libros (5)
  2. Mascotas (2)



Como pueden ver falta la categorí­a Lapices, quisiera que fuera asi:



delphi
  1. Libros (5) // hay 5 articulos ligado a esta categoria y asi sucesivamente...
  2. Mascotas (2)
  3. Lapices (0)



¿Cual es la forma correcta de hacer esta consulta?.

Saludos.
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.283 mensajes
  • LocationMéxico

Escrito 27 febrero 2009 - 05:17

Hola

Y si usas un JOIN ???



sql
  1. SELECT c.cat_id, c.categoria, COUNT(n.categoria) AS total FROM articulo n
  2. INNER JOIN categorias c ON c.cat_id = n.categoria
  3. GROUP BY c.cat_id, c.categoria
  4. ORDER BY c.categoria ASC



Salud OS
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 27 febrero 2009 - 05:31

Gracias Egostar, pero me sigue mostrando los mismos datos faltando una categorí­a :(, y probé el LEF JOIN, ya me faltará hacer la consulta individual.

Saludos.
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.283 mensajes
  • LocationMéxico

Escrito 27 febrero 2009 - 05:37

Intenta con esto amigo, esto es algo que me enseño mi buen amigo jhonny.



sql
  1. SELECT c.cat_id, c.categoria, COALESCE(COUNT(n.categoria),0) AS total FROM articulo n, categorias c
  2. WHERE c.cat_id = n.categoria
  3. GROUP BY c.cat_id, c.categoria ORDER BY c.categoria ASC



Salud OS
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 27 febrero 2009 - 05:44

Pues con el Coalesce me sigue mostrando los mismos datos :(

Saludos.
  • 0

#6 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 27 febrero 2009 - 06:43

creo que resolví­ el problema cambiando unas cuantas cosillas aquí­ y allá:



sql
  1. SELECT c.cat_id, c.categoria, COALESCE( COUNT( n.categoria ) , 0 ) AS total
  2. FROM smf_noticias n
  3. RIGHT JOIN smf_noticias_cat c ON n.categoria = c.cat_id
  4. GROUP BY c.categoria, c.cat_id
  5. ORDER BY c.categoria ASC



como pueden ver utilicé el RIGHT JOIN e invertí­ el orden donde está luego de ON y obtuve los resultados que quise, muchas gracias Egostar por tu ayuda.

Saludos.
  • 0