Oberpunkte ausfiltern in MySql

Sprint

Erfahrenes Mitglied
Hallo zusammen,

bei einem DB gestützten Menü ergibt sich für mich ein Problem. Bei dem verwendeten Script lassen sich bei den Oberpunkten keine Verlinkungen platzieren, bzw. sie werden bim Aufklappen des Menüs nicht ausgeführt. Das selbst ist kein Problem, nur kann der Admin im CMS trotzdem Texte auf diese Oberpunkte anlegen. Um das zu verhindern, möchte ich bei der Auswahl, zu welchem Menüpunkt der Text erstellt werden soll, die Punkte ausblenden, die Unterpunkte besitzen.
Beispiel:

id | bezeich | parentid

01 | Punkt a | 0
02 | Punkt b | 0
03 | Punkt c | 2
04 | Punkt d | 2
05 | Punkt e | 2
06 | Punkt f | 0


Es sollen also nur die Punkte 1, 3, 4, 5, 6 ausgegeben werden. Punkt 2 nicht, da er Unterpunkte besitzt.
Mit zwei getrennten Abfragen und verarbeiteten Arrays hab ich es hinbekommen, aber leider hab ich überhaupt keine Idee, wie man sowas in einer Abfrage ausführen kann. Hat da jemand einen Ansatz für mich?

Vielen Dank schonmal,
Sprint
 
Hallo,

filtere nach den parentids, in etwa so (ohne testen):

SQL:
SELECT * FROM tabelle WHERE id NOT IN (SELECT DISTINCT parentid FROM tabelle);

Gruß
BK
 
Du must einfach prüfen, dass die ID nirgens als parentid aufgelistet ist. Entweder mit einem Subquery
SQL:
SELECT
	*
FROM
	menu11
WHERE
	id NOT IN (
				SELECT DISTINCT 
					parentid 
				FROM 
					menu11 
				WHERE 
					parentid <> 0
			  )

oder mittels JOIN
SQL:
SELECT
	m1.*
FROM
	menu11 AS m1
	LEFT JOIN menu11 AS m2
		ON m1.id = m2.parentid
WHERE
	m2.id IS NULL
 
Vielen Dank für die schnelle Hilfe an Yaslaw und Bratkartoffel (deine Lösung hat auch auf Anhieb funktioniert).
 
Zurück