Hallo beste mensen,

Ik ben zelf een forum aan het schrijven en ik loop nu al tegen het eerste probleem, ik wil in een query alle categorieën selecteren en ook het aantal topics in die categorie.

Dit is de query die ik nu gebruik:

<?php
	$sFora = "	SELECT
					c.c_id,
					c.naam,
					COUNT(t.t_id) AS aantaltopics
				FROM
					cats AS c,
					topics AS t
				WHERE
					t.t_id = c.c_id
				;";
?>


De foutmelding die ik krijg:

Error!

Fout: SQL-fout
Query: SELECT c.c_id, c.naam, COUNT(t.t_id) AS aantaltopics FROM cats AS c, topics AS t WHERE t.t_id = c.c_id ;
Errornummer: 1140
Foutmelding: Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause



Ik begrijp hieruit dat ik iets met het GROUP BY element moet doen, maar daar begrijp ik niet heel erg veel van, ik heb hier een tutorial over GROUP BY gelezen maar ik snap het nog steeds niet echt.

Heeft iemand voor mij een werkende oplossing

Groetjes

Freek
@Blanche: Het werkt perfect dankje wel, ik stond net op het punt mijn computer uit het raam te gooien =P

@all: Heel erg bedankt voor al jullie moeiten! Top!
[edit]
Net te laat gepost,

Maar het werkt wel
[/edit]
Ik heb de query nog iets aangepast, nu zit de naam er ook in ;)

ps. In dit geval is de GROUP BY op de naam dus eigenlijk niet nodig omdat je weet dat de naam uniek is. Maar aangezien je die restrictie niet in je database hebt zitten, moet je hem in je query wel opnemen ;)
@Willem

ORA-00979: not a GROUP BY expression krijg ik bij deze SQL
SELECT 
	   COUNT(*) AS AANTAL,
	   FIRST_NAME,
	   LAST_NAME
FROM
	EMPLOYEES	   
GROUP BY
	  LAST_NAME	

De cursor staat op dat moment bij FIRST_NAME

zo werkt ie wel

SELECT 
	   COUNT(*) AS AANTAL,
	   FIRST_NAME,
	   LAST_NAME
FROM
	EMPLOYEES	   
GROUP BY
	  LAST_NAME,
	  FIRST_NAME	

Een en ander getest met de aplicatie TOAD op een ORACLE 10db

[edit]codetags[/edit]
als je wil kam ik wel een screenie maken
Dit klopt Klaasjan, hier moet je inderdaad alle kolommen opnemen in je GROUP BY clause. Zou je eens kunnen proberen of dit werkt:

SELECT 
       COUNT(*) AS AANTAL
FROM
    EMPLOYEES       
GROUP BY
      LAST_NAME

Ik neem aan van wel in ieder geval.

SELECT COUNT(*) AS AANTAL FROM PBSPSN
GROUP BY VOORLET


Werkt prima

[edit] ik reageerd op WIllem VP in mijn bovenstaande post[/edit]
Willem vp schreef op 22.01.2007 20:29


KLaasjan schreef :ik weet zeker dat je daarmee moet groeperen op alles wat in de SELECT staat behalve datgene wat je met de agregate?? functie, in dit geval COUNT() opvraagd
.....
Wat je hier zegt, klopt in ieder geval niet. Je mag ook rustig op slechts 1 veld groeperen; de enige voorwaarde is dat dat veld ook voorkomt in de SELECT. Die voorwaarde is er by MySQL niet. Je mag dus rustig iets doen als:
Ja, precies wat ik al dacht. Willem vp stelde dat dit alleen mogelijk was in MySQL, maar dat leek me al zo sterk...
Nou volgens mij zijn we nu wel uit de juiste syntax van GROUP BY icm de aggregate functies :)

Reageren