MySQL Verständis Problem



  • Hallo,

    ich habe eine Select Abfrage für eine Baumstruktur in MySQL. Nur leider verstehe ich sie nicht so ganz, vielleicht könnt Ihr mir ja helfen da durchzublicken.
    Hier die Abfrage:

    SELECT n.*, ((min(p.rgt)-n.rgt-(n.lft>1))/2) > 0 AS lower,
    (( (n.lft-max(p.lft)>1) )) AS upper 
    FROM tree n, tree p 
    WHERE n.lft BETWEEN p.lft AND p.rgt 
    AND (p.root_id = n.root_id) 
    AND (p.id != n.id OR n.lft = 1) 
    AND (p.root_id = "1") 
    GROUP BY n.id ORDER BY n.lft
    

    Meine frage ist jetzt wie genau errechnet sich jetzt das lower und das upper Feld?
    Ist das jetzt so das lower sich so errechnet?
    ((kleinstes rgt aller datensätze - erster.rgt?? - (erster.lft > 1)) / 2).

    Das ergenbis liefert mir insgesamt 5 datensätze die so aussehen:
    [url]
    http://www.heavenfighter.net/tmp/sql1.gif
    [/url]

    Ich bekomme das mit dem lower oder upper aber im Kopf nicht raus.. 😞



  • Wie siehen denn die Datensätze aus bzw. was willst du da überhaupt berechnen?! Was mir auffällt ist, dass du mit GROUP BY mehrere Datensätze zusammenfasst, dann aber bei der Berechnen sowohl MIN/MAX verwendest, aber auch direkt auf die Felder zugreifst 😕



  • Also die datensätze sehen so wie auf dem Bild aus, nur ohne die Felder lower und upper, die werden ja erst berechnet.
    Ansonsten werden in der Tat nur bereits die vorhandenen datensätze angezeigt.
    Das GROUP BY muss ich machen, da es ansonsten nicht möglich ist die min und max berechnung zu machen.

    Ich musste das Bild hinter dem Link noch mal erneuern, das war ein falsches ohne die upper und lower ergebnisse.

    Wie gesagt, mir geht es um die Berechnung von upper und lower. Mit welcher Logik muss man die beiden Formeln anwenden um auf die Ergebnisse zu kommen?



  • flenders schrieb:

    was willst du da überhaupt berechnen?!


Anmelden zum Antworten