Recherche de tous les parents dans une table MySQL avec une seule requête récursive
Considérez le schéma de table MySQL suivant avec des exemples de données :
| ID | TITLE | CONTROLLER | METHOD | PARENT_ID | |----|-------------------|------------|-------------------|-----------| | 1 | Dashboard | admin | dashboard | 0 | | 2 | Content | admin | content | 0 | | 3 | Modules | admin | modules | 0 | ...
Défi :
Notre l'objectif est de trouver tous les parents d'un enregistrement spécifique, à savoir celui avec title = 'Categories', à l'aide d'une seule requête SQL.
Sortie souhaitée :
id | title | controller | method | url | parent_id ---------------------------------------------------------------- 3 | Modules | admin | modules | (NULL) | 0 17 | User Modules | modules | user_module | (NULL) | 3 31 | Categories | categories | category | (NULL) | 17
Solution :
Nous utilisons une expression de table commune récursive (CTE) pour parcourir la hiérarchie des tables et identifier tous ancêtres de l'enregistrement souhaité :
WITH RECURSIVE Parents AS ( SELECT id, parent_id FROM menu WHERE id = 31 UNION ALL SELECT m.id, m.parent_id FROM Parents AS p JOIN menu AS m ON p.parent_id = m.id ) SELECT m.id, m.title, m.controller, m.method, m.url, m.parent_id FROM Parents AS p JOIN menu AS m ON p.id = m.id ORDER BY p.id DESC;
Explication :
En exécutant cette requête, nous obtenons le résultat souhaité, répertoriant tous les parents de l'enregistrement Catégories.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!