Mostrar numero de anuncios por categorias en tabla PHP MySQL

  • Autor Autor Andresoso
  • Fecha de inicio Fecha de inicio

Andresoso

Curioso
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola a todos, siempre he hecho cosas muy basicas con php y mysql, pero esta es una duda que no se como resolverla, es algo muy basico que me ha tenido pensando.

Tengo 2 tablas:

Tabla1 categorias: ID , NOMBRE

Tabla 2 anuncios: ID, CATEGORIA

Necesito mostrar en una tabla el numero de Anuncios que se encuentran por cada categoria, no hay problema pero cuando uso el count las categorias que tienen 0 anuncios no me las muestra, solo las que sí. Ando perdido. lo intente con LEFT JOIN pero tampoco funciono.

SELECT CATEGORIAS.apodo, CATEGORIAS.ID AS CATID, CATEGORIAS.imagen, CATEGORIAS.nombre AS CATN, count(ANUNCIOS.categoria) AS cantidad FROM CATEGORIAS INNER JOIN ANUNCIOS ON CATEGORIAS.ID=ANUNCIOS.categoria group by ANUNCIOS.categoria order by CATN ASC

Gracias por su ayuda
 
Con un LEFT JOIN y un GROUP BY (como comenta el compañero) te debería de funcionar. Algo como:
PHP:
SELECT categorias.nombre,
        COUNT(anuncios.id) AS anuncios
    FROM categorias
        LEFT JOIN anuncios ON anuncios.categoria = categorias.id
    GROUP BY categorias.id;

Saludos.
 
Si sólo se permite una categoría por anuncio, el sistema lo tienes bien, en caso contrario de que un anuncio pueda tener dos categorías, te haría falta poner una tercera tabla de relación:

Insertar CODE, HTML o PHP:
+-----------------+-------------+
| id_announcement | id_category |
+-----------------+-------------+
| 23              | 2           |
+-----------------+-------------+
| 14              | 7           |
+-----------------+-------------+
| 7               | 5           |
+-----------------+-------------+

En todo caso, y siguiendo el patrón de un anuncio > una categoría, deberás de usar un JOIN con GROUP BY como te han comentado.
 
Gracias no entendia muy bien lo de la agrupación y el count, el ejemplo de lombervid fue acertado

Gracias gracias 🙂