all children of one parent recursive sql
SELECT
cat.id,
cat.title
FROM
(
SELECT
# Zeilennummer. Wird später für die Sortierung des GROUP_CONCAT verwednet
@rownum := @rownum+1 AS rownum,
# id die für den Pfad verwendet wird
IF(@lastid <> mylist.id, @id := mylist.id, @id) AS pathid,
# Die Start-Id.
@lastid := mylist.id AS id,
# bestimmen der nächsten id im Path
@id := (SELECT p_id FROM cat WHERE id = @id) AS parentID
FROM
# Variablen initialisieren
(SELECT @id := 0, @lastid := 0, @rownum := 0) AS vars,
# Die Tabelle mit sich selber multiplizieren umd genügend
# Zeilen zur Verfügung zu haben
(SELECT id FROM cat) AS myloop,
(SELECT id FROM cat) AS mylist
) AS t
INNER JOIN cat
ON t.id = cat.id
WHERE
# Wir suchen alle Unterordner der id 2
pathid = 2
direct cildrens of parent (list) sql
SELECT p_id, GROUP_CONCAT(id) FROM cat
GROUP BY p_id;
sitemap tree sql
SELECT DISTINCT
pathid AS id,
tree_level,
cat.title,
cat.url,
cat.stat
FROM
(
SELECT
pathid,
@tree_level := IF(@last_tree_id = id, @tree_level +1, 1) AS tree_level,
@last_tree_id := id AS id,
@tree_sort := IF(@tree_level > 1, CONCAT(@tree_sort, '.', LPAD(pathrang, 4, 0)), LPAD(pathrang, 4, 0)) AS tree_sort
FROM
(
SELECT
@rownum := @rownum+1 AS rownum,
IF(@lastid <> mylist.id, @id := mylist.id, @id) AS pathid,
IF(@lastid <> mylist.id, @rang := mylist.rang, @rang) AS pathrang,
@lastid := mylist.id AS id,
@id := (SELECT p_id FROM cat WHERE id = @id) AS parentID,
@rang := (SELECT rang FROM cat WHERE id = @id) AS rang
FROM
(SELECT @id := 0, @lastid := 0, @rownum := 0) AS vars,
(SELECT id FROM cat) AS myloop,
(SELECT id, rang FROM cat) AS mylist
) AS t,
(SELECT @tree_sort := '', @last_tree_id := 0, @tree_level := 0) as lvars
WHERE
pathid IS NOT NULL
ORDER BY id, rownum DESC
) AS t1,
cat
WHERE cat.id = t1.pathid
ORDER BY tree_sort