Hallo,

Dit is mijn eerste keer hier, en kheb me eigenlijk ook geregistreerd om deze vraag te stellen:

Stel ik heb 2 tabellen, nieuws_categorieen en nieuws.

#nieuws_categorieen
id
titel
active

# Nieuws
id
categorie_id
titel
body
active
views

Ik wil een lijst hebben met de categorieen:
SELECT titel
FROM nieuws_categorieen
WHERE active=1;

Tot nu toe nog simpel.
Maar stel ik heb 5 berichten in categorie 1 en bijvoorbeeld 14 in categorie 2 en die aantallen wil ik graag ook meenemen in een enkele query.

Ik heb tot nu toe al dit geprobeert:
SELECT COUNT(DISTINCT(nc.id)) AS aantallen
FROM nieuws_categorieen nc
LEFT JOIN nieuws n
ON n.categorie_id=nc.id;

Maar dat schiet ook niet echt op.
Iemand een idee?
[code]
SELECT
nieuws_categorieen.titel,
COUNT(nieuws.id)
FROM
nieuws_categorieen,
nieuws
WHERE
nieuws_categorieen.active = 1
&& nieuws.categorie_id = nieuws_categorieen.id
Dank voor de snelle reactie maar ik krijg dit terug:
Mixing of GROUP columns(MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Oops, ik bedoelde natuurlijk:


SELECT
    nieuws_categorieen.titel,
    COUNT(nieuws.id)
FROM
    nieuws_categorieen,
    nieuws
WHERE
        nieuws_categorieen.active = 1
    &&  nieuws.categorie_id = nieuws_categorieen.id
GROUP BY
    nieuws.id

owacht ik heb het al.
Die GROUP BY heeft weinig nut, in dat geval zou je juist moeten groeperen op nieuws_categorieen.titel...

ps. Schrijf JOINs overigens altijd gewoon netjes uit, dat maakt het wel zo duidelijk:

SELECT
  nc.titel,
  COUNT(n.id) AS aantal
FROM
  nieuws_categorieen AS nc
INNER JOIN
  nieuws AS n
    ON n.categorie_id = nc.id
WHERE
  nc.active = 1
GROUP BY
  nc.titel

edit: WHERE clausule toegevoegd...
Oops, ik ben echt niet helder vandaag. Ik bedoelde een GROUP BY op categorie ID.
Jonathan schreef op 09.01.2009 15:53
Oops, ik ben echt niet helder vandaag. Ik bedoelde een GROUP BY op categorie ID.
Dat heeft het hetzelfde resultaat als je eerdere voorbeeld. Je moet juist groeperen op kolommen die niet in een aggregate functie gebruikt worden en wel in de SELECT voorkomen.

Zie ook deze tutorial over het juiste gebruik van GROUP BY.

Reageren