Hallo.
Folgende Situation:
Nested Set für Kategorien.
Es gibt folgende Einträge:
categoryid categoryname lft rgt level
1 Oberkategorien 1 22 1
2 Kommunikation 2 17 2
3 Auto & Verkehr 18 21 2
4 Beauty 22 23 2
5 Ktheorien 3 12 3
6 Kwissenschaften 13 14 3
7 Paul Watzlawick 4 5 4
8 Schulz von Thun 6 7 4
9 Niklas Luhmann 8 9 4
10 David Bohm 10 11 4
11 Führerschein 19 20 3
Der folgende Query:
SELECT
IF(node2.lft+1!=node2.rgt, node1.categoryname, node2.categoryid) AS res
FROM board_category AS node1
LEFT JOIN board_category AS node2 ON node2.categoryname='Ktheorien'
WHERE
node1.lft BETWEEN node2.lft AND node2.rgt
AND node1.level = node2.level+1
soll folgendes tun:
Er soll mir alle Kinder von Ktheorien holen aber nicht die Kindes-Kinder.
Ergebnis sollte also sein: Paul Watzlawick, Schulz, von Thun, Niklas Luhmann und David Bohm.
Das klappt auch.
Nun - folgender Query ist genau wie der obrige nur mit "Paul Watzlawick" als Kategoriename:
SELECT
IF(node2.lft+1!=node2.rgt, node1.categoryname, node2.categoryid) AS res
FROM board_category AS node1
LEFT JOIN board_category AS node2 ON node2.categoryname='Paul Watzlawick'
WHERE
node1.lft BETWEEN node2.lft AND node2.rgt
AND node1.level = node2.level+1
Paul Watzlawick hat keine Kinder. Was soll er also tun? Stattdessen soll er mir doch wenigstens Paul Watzlawicks ID zurückgeben - damit ich im weiteren Programmfluss alternativ mit der Situation umgehen kann.
Das klappt leider nicht und ich weiß nicht warum.
Wenn Paul keine Kinder hat muss sein lft-Wert + 1 = sein rgt-Wert sein. Logisch.
Wenn also dieser Fall sein sollte und Paul keiner Kinder hat gibt IF-mir die KategorieID zurück - ich bin ja vorher genau an dem Punkt gejoint wo der Name "Paul Watzlawick" lautet.
Warum klappt das nicht? Ich bekomme ein leeres Array zurück.
Grüße,
Jo