weblog, content management & redaktion
RSS Feed für `SQL` Seite drucken

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