sql >> Database teknologi >  >> RDS >> Mysql

Forælder barn mysql

REDIGER

arbejdseksempel, der adresserer Gordons note

Forespørgselsberegn nodesti, da du har fastsat maksimal trædybde, og rækkefølge efter det.

SQL Fiddle

MySQL 5.5.30-skemaopsætning :

create table mytable(id int, parent_id int, name varchar(100));

insert mytable(id, parent_id, name)
values (1, null, 'Home'),
(2, null, 'Services'),
(3, 2, 'Baking'),
(4, 3, 'Cakes'),
(5, 3, 'Bread'),
(6, 5, 'Flat Bread'),
(7, 1, 'Something');
 

Forespørgsel 1 :

select t0.*,
  concat(
      case coalesce(t4.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t4.Parent_ID as char), '\\')
      end,
      case coalesce(t3.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t3.Parent_ID as char), '\\')
      end,
      case coalesce(t2.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t2.Parent_ID as char), '\\')
      end,
      case coalesce(t1.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t1.Parent_ID as char), '\\')
      end,
      case coalesce(t0.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t0.Parent_ID as char), '\\')
      end,
      cast(t0.id as char)
    ) as path
from mytable t0 
    left join mytable t1 on t0.Parent_ID = t1.Id
    left join mytable t2 on t1.Parent_ID = t2.Id
    left join mytable t3 on t2.Parent_ID = t3.Id
    left join mytable t4 on t3.Parent_ID = t4.Id
order by 
  concat(
      case coalesce(t4.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t4.Parent_ID as char), '\\')
      end,
      case coalesce(t3.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t3.Parent_ID as char), '\\')
      end,
      case coalesce(t2.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t2.Parent_ID as char), '\\')
      end,
      case coalesce(t1.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t1.Parent_ID as char), '\\')
      end,
      case coalesce(t0.Parent_ID, 0) 
        when 0 then ''
        else concat(cast(t0.Parent_ID as char), '\\')
      end,
      cast(t0.id as char)
    )
 

Resultater :

| ID | PARENT_ID | NAME | PATH | ----------------------------------------- | 1 | (null) | Home | 1 | | 7 | 1 | Something | 1\7 | | 2 | (null) | Services | 2 | | 3 | 2 | Baking | 2\3 | | 4 | 3 | Cakes | 2\3\4 | | 5 | 3 | Bread | 2\3\5 | | 6 | 5 | Flat Bread | 2\3\5\6 |

  1. GATHER_PLAN_STATISTICS genererer ikke grundlæggende planstatistik

  2. MYSQL REGEXP søgning i JSON-streng

  3. Trigger for at spore ændringer i MySQL-databasen

  4. mysql-struktur til indlæg og kommentarer