2017-01-28 2 views
2

j'ai ce cas en utilisant requête récursive sur Mysql pour trouver LV2 et LV3 enfant sur une table ...
structure de base de données J'utilise:
MySQL récursive obtenir tous les enfants de parents

id name parent 
1 A 0 
2 B 0 
3 C 0 
4 D 1 
5 E 1 
6 F 2 
7 G 2 
8 H 3 
9 I 3 
10 J 4 
11 K 4 

Le résultat que je m'attendais, en filtrant les données, où id = 1, il générera le résultat que j'attends.

id name parent 
4 D  1 
5 E  1 
10 J  4 
11 K  4 

ou c'est l'illustration. Illustration

j'ai cherché partout, et la lecture de ce http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/,but je ne ai pas trouvé le résultat que je recherchais ..
toute aide sera appriciated, grâce

+0

insérez votre nom de table, et la page que vous avez liée n'existe pas – Ollaw

Répondre

0
SELECT * 
FROM TABLENAME 
WHERE PARENT = 1 
UNION 
SELECT * 
FROM TABLENAME 
WHERE PARENT IN 
    (SELECT ID FROM TABLENAME WHERE PARENT = 1) 
+0

qui était rapide, merci .. je utilisais le même quey, mais il semble que j'avais tort d'écrire la requête sur où parent IN (SELECT ID FROM TABLENAME O WH PARENT = 1). @Ollaw –

0

Essayez ceci, beaucoup plus rapide

SELECT * FROM table AS T1 INNER JOIN (SELECT id FROM table WHERE parent = 1) AS T2 ON T2.id = T1.parent OR T1.parent = 1 GROUP BY T1.id 
6

si vous voulez obtenir tous les enfants de niveau d'un parent particulier alors vous devriez essayer

select id, 
     name, 
     parent 
from (select * from tablename 
     order by parent, id) tablename, 
     (select @pv := '1') initialisation 
where find_in_set(parent, @pv) > 0 
and  @pv := concat(@pv, ',', id) 
+0

Veuillez expliquer votre segment de code. Juste un morceau de code ne sera pas très utile pour les utilisateurs. – Billa

+0

cette requête est utile si vous voulez obtenir tous les enfants d'un parent et aussi leur enfant et ainsi de suite. ou simplement nous pouvons dire que cela est utile pour obtenir des données récursives –