Probleme mit HAVING bei Nested Sets über merhere Tabellen
Daniel D.
- datenbank
0 bubble
Ich habe zwei Abfragen die ich zu einer verschmelzen möchte, aber alle Versuche waren NIX:
In einer Tabelle habe ich die Spalte titel und kategorie
SELECT titel FROM daten WHERE kategorie = ??????
in der zweiten habe ich meine ganzen Kategorien, die ich mit Nested Set abgespeichert habe, das ich hier im Forum schon ein paar mal gefunden habe...
SELECT o.name,
COUNT(p.id)-1 AS level
FROM tree AS n,
tree AS p,
tree AS o
WHERE o.lft BETWEEN p.lft AND p.rgt
AND o.lft BETWEEN n.lft AND n.rgt
AND n.id = 10
GROUP BY o.lft
ORDER BY o.lft;
und nun möchte ich die beiden SELECT Abfragen zu einer zusammen bekommen:
damit ich alle Ergebnisse aus meiner daten Tabelle ausgeben kann mit den passenden Kategorien.
Diese werden unter COUNT(p.id)-1 AS
level ausgegeben (1), so denke ich eigentlich das ich das mit HAVING
(3) lösen kann, doch ich bekomme nur die Fehlermeldung Unknown column 'a.cat' in 'having clause'
SELECT o.name,
COUNT(p.id)-1 AS level,
a.titel <----------------------------------------------1
FROM
tree AS n,
tree AS p,
tree AS o,
daten AS a <----------------------------------------------2
WHERE o.lft BETWEEN p.lft AND p.rgt
AND o.lft BETWEEN n.lft AND n.rgt
AND n.id = 6
GROUP BY o.lft
HAVING level = a.kategorie <----------------------------------------------3
ORDER BY o.lft
Irgendwie habe ich mir das leichter vorgestellt mit der Struktur, da bekommt man ja einen Knoten in den Kopf...
Daniel
[…] das ich das mit
HAVING
(3) lösen kann, doch ich bekomme nur die Fehlermeldung Unknown column 'a.cat' in 'having clause'
SELECT o.name,
COUNT(p.id)-1 AS level,
a.titel <----------------------------------------------1
FROM
tree AS n,
tree AS p,
tree AS o,
daten AS a <----------------------------------------------2
WHERE o.lft BETWEEN p.lft AND p.rgt
AND o.lft BETWEEN n.lft AND n.rgt
AND n.id = 6
GROUP BY o.lft
HAVING level = a.kategorie <----------------------------------------------3
ORDER BY o.lft
Ich gehe mal davon aus, dass du MySQL verwendest, ansonsten hast du schon bei `a.titel`{:.language-sql} (1) einen Fehler, weil alles was selektiert wird im `GROUP BY`{:.language-sql} erscheinen muss bei vielen anderen SQL-Dialekten.
(Solltest du vielleicht trotzdem machen weil sonst irgendein a.titel genommen wird)
Ansonsten kann ich mir nur vorstellen, dass `HAVING`{:.language-sql} (3) a.cat bzw. a.kategorie 'rum zickt, weil nicht auch nach a.cat gruppiert wird, schließlich hängen GROUP BY und HAVING zusammen.
MfG
bubble
PS: Alles nur reine Vermuting, ich hab mich bis dato weder mit Nested Sets beschäftigt, noch brauchte ich HAVING.
PPS: left mit lft, bzw. right mit rgt abzukürzen ist mMn. eher kontraproduktiv, es verschlechtert die Lesbarkeit recht stark, dafür dass du nur 1 bzw. 2 Zeichen pro Wort einsparst.
--
If "god" had intended us to drink beer, he would have given us stomachs. - David Daye