Daniel D.: Probleme mit HAVING bei Nested Sets über merhere Tabellen

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

  1. […] 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