JOIN en GROUP BY met meerdere joins

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kay Kay

Kay Kay

14/03/2009 21:28:00
Quote Anchor link
Ik ben een simpel forum aan het maken, of eigenlijk, het forum van Bas optimaliseren en veilig maken.

Nu wil ik op de index pagina, waar alle categorieën staan, de hoeveelheid topics en de hoeveelheid reacties optellen in 1 query.
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
15
16
17
18
19
20
21
SELECT
    c.naam,
    c.id,
    c.beschrijving,
    COUNT(r.id) as reacties,
    COUNT(t.id) as topics
FROM
    categorie as c
LEFT JOIN
    topics as t
ON
    (c.id=t.cat)
LEFT JOIN
    reacties_forum as r
ON
    (c.id=r.cat)
GROUP BY
    t.cat AND
    r.cat
ORDER BY
    c.sort ASC

Opzich werkt dit wel, maar als er nog geen reacties zijn geplaatst, laat hij maar 1 categorie zien en valt de andere weg. Ik heb nu 2 categorieën.

Hoe is het wel goed? Volgens mij zit ik aardig in de goede richting :)
 
PHP hulp

PHP hulp

22/12/2024 07:13:20
 
Kay Kay

Kay Kay

15/03/2009 12:26:00
Quote Anchor link
Kick?
 
Eddy E

Eddy E

15/03/2009 12:42:00
Quote Anchor link
Probeer eens:

ON (t.cat = c.id)
en
ON (r.cat = c.id)

Dus de volgorde omdraaien.
Gewijzigd op 01/01/1970 01:00:00 door Eddy E
 
Kay Kay

Kay Kay

15/03/2009 12:46:00
Quote Anchor link
Werkt niet :(
 
Frank -

Frank -

15/03/2009 13:04:00
Quote Anchor link
Eddy Erkelens schreef op 15.03.2009 12:42:
Ik heb ook wel eens gehad dat dat verschil maakte.... raar maar waar (was ook mysql).
Duh! Daarom noemen ze het ook een LEFT join. Wat dan links staat, heeft een andere betekenis dan wat er rechts (RIGHT) staat. Alleen bij een INNER join maakt het niet uit, dan moet er een 1-op-1 relatie aanwezig zijn. Bij een LEFT mag het 1-op-0 zijn, bij RIGHT 0-op-1.

De GROUP BY is niet goed, die moet op alle kolommen die NIET in een aggregate functie staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
GROUP BY
    c.naam,
    c.id,
    c.beschrijving


Heb je de MySQL-database (of sessie) wel correct geconfigureerd? Zo niet, dan zal MySQL onzin verzinnen wanneer jouw query fout is.
 
Kay Kay

Kay Kay

15/03/2009 13:52:00
Quote Anchor link
Oke bedankt. Ik heb nu wat ik wil :) En ik snap ook waarom het niet kan wat ik eerst had dankzij dit.

Ik heb ook dit helemaal gelezen. Het komt er dus op neer dat MySQL slecht is.
Ik wil wel de configuratie wel aanpassen, maar moet ik dit dan gewoon in een query zetten? En moet het dan elke keer gebeuren dat ik contact maak met de DB? Of gewoon eenmalig?
 
Frank -

Frank -

15/03/2009 14:55:00
Quote Anchor link
Dragy schreef op 15.03.2009 13:52:
Het komt er dus op neer dat MySQL slecht is.
Precies, het is van a tot z onbetrouwbaar.

Quote:
Ik wil wel de configuratie wel aanpassen, maar moet ik dit dan gewoon in een query zetten? En moet het dan elke keer gebeuren dat ik contact maak met de DB? Of gewoon eenmalig?
Iedere keer dat je een connectie met de database maakt, zul je weer de juiste configuratiesettings moeten opgeven. Doe je dat niet, weet je niet wat de gevolgen zijn.

Maar het blijft een lapmiddel, de database is zelfs met de best mogelijke instellingen onbetouwbaar. Waarom? Omdat je die settings ieder moment weer kan aanpassen.

Stap over op een betrouwbare database, bv. PostgreSQL, en je bent van dit gezeur af. Gewoon een betrouwbare database, een DBMS, die ook nog eens barst van de functionaliteit en razendsnel is. Wat wil je nog meer?
 



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.