JOIN en GROUP BY met meerdere joins
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
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 :)
Kick?
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
Werkt niet :(
Eddy Erkelens schreef op 15.03.2009 12:42:
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.Ik heb ook wel eens gehad dat dat verschil maakte.... raar maar waar (was ook mysql).
De GROUP BY is niet goed, die moet op alle kolommen die NIET in een aggregate functie staan:
Heb je de MySQL-database (of sessie) wel correct geconfigureerd? Zo niet, dan zal MySQL onzin verzinnen wanneer jouw query fout is.
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?
Oke bedankt. Ik heb nu wat ik wil :) En ik snap ook waarom het niet kan wat ik eerst had dankzij 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?
Dragy schreef op 15.03.2009 13:52:
Precies, het is van a tot z onbetrouwbaar.Het komt er dus op neer dat MySQL slecht is.
Quote:
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.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?
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?