Join en group by

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Stijn

stijn

05/11/2007 19:09:00
Quote Anchor link
Ik heb een soort van forum gemaakt. Waarbij leden in verschillende groepen zijn ingedeeld. Ik wil een lijstje met de groepen maken met daarbij het aantal ingestuurde berichten, en die dan ook nog van meeste naar minste. Ook het aantal leden moet bij de groep komen te staan. Ik heb een tabel met de groepen met groep namen, in de user tabel staan het aantal ingezonden berichten en de naam van de groep waar die user inzit.
Nu wil ik dat lijstje met de volgende query ophalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT g.image, g.name, SUM( u.berichten ) AS berichten, COUNT( u.id ) AS leden
FROM `groups` AS g, `users` AS u
GROUP BY u.`group`
WHERE g.name = u.`group`
ORDER BY SUM(u.berichten) DESC

Mysql geeft de volgende foutmelding:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE g.name = u.`group`
ORDER BY SUM( u.berichten) DESC' at line 4


Kan iemand mij vertellen wat ik fout doe?

Bedankt,
Stijn
 
PHP hulp

PHP hulp

23/04/2024 12:36:39
 
Robert Deiman

Robert Deiman

05/11/2007 19:21:00
Quote Anchor link
Paar dingen:

Backtics (`) horen niet in je query thuis! Dat is een MySQL only dingetje, wat overbodig is.

Je hebt de GROUP BY volgens mij op de verkeerde weg staan

Zo dan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
    g.image,
    g.name,
    SUM( u.berichten ) AS tel_berichten,
    COUNT( u.id ) AS leden
FROM
    groups AS g,
    users AS u
WHERE
    g.name = u.group
GROUP BY
    g.name
ORDER BY
    SUM(u.berichten) DESC


Ik weet niet zeker (dacht het niet) of die SUM() wel in de ORDER BY kan, probeer het anders evt. nog zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
    g.image,
    g.name,
    SUM( u.berichten ) AS tel_berichten,
    COUNT( u.id ) AS leden
FROM
    groups AS g,
    users AS u
WHERE
    g.name = u.group
GROUP BY
    g.name
ORDER BY
    tel_berichten DESC
 
Stijn

stijn

05/11/2007 19:34:00
Quote Anchor link
Bedankt,
Where en GROUP BY moest inderdaad omgedraaid worden dat was alles. Als ik ` niet gebruik dan ziet hij group als onderdeel van GROUP BY.
 
Robert Deiman

Robert Deiman

05/11/2007 19:41:00
Quote Anchor link
Dan moet je group niet als kolomnaam gebruiken. Dat is een SQL preserved word (een woord wat dus bij SQL al bekend is en als functie dient)
Noem de kolom gewoon usergroup, dat is ook nog eens meteen duidelijker ;)
 
Frank -

Frank -

05/11/2007 19:54:00
Quote Anchor link
De query is trouwens ongeldig en zal een broodje aap opleveren. Leuk als je daar in wilt geloven, maar ga niet klagen dat er geen ruk van klopt.

Gebruik een echte database of stel MySQL in op STRICT, dan wordt de query direct afgekeurd.

Tip: Zet alle onderdelen in het SELECT-gedeelte ook in de GROUP BY. Dát is hoe je GROUP BY moet gebruiken.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.