⊗ppPmDOFR 385 of 447 menu

Relations de données parentes en PHP

Supposons que nous soyons confrontés à la tâche de stocker des pères et des fils. Supposons que chaque père ne puisse avoir qu'un seul fils, et le fils à son tour peut aussi avoir un seul fils.

Nous devons trouver comment stocker les données. La première idée qui peut venir à l'esprit est de créer deux tables : parents pour les pères et sons pour les fils. Puis de lier ces tables par un champ quelconque : son_id ou parent_id.

Cependant, cette idée n'est pas très bonne - car une même personne peut être à la fois père et fils - et il faudra la stocker dans les deux tables, ce qui est peu pratique, prend plus de place et conduit facilement à des erreurs.

Une meilleure option est de lier la table à elle-même : créons une table users, dans laquelle nous stockerons tous les utilisateurs et pour chacun nous créerons un champ son_id, dans lequel sera stocké l'id du fils de cette même table :

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Requêtes

Écrivons maintenant une requête qui récupérera l'utilisateur ainsi que son fils.

Pour commencer, récupérons simplement les utilisateurs :

SELECT * FROM users

Maintenant, joignons à les utilisateurs leurs fils. Nous allons joindre la table à elle-même, donc nous devons effectuer son renommage :

LEFT JOIN users as sons

Maintenant nous pouvons spécifier la liaison entre la table principale et la table renommée :

LEFT JOIN users as sons ON sons.id=users.son_id

Spécifions maintenant les champs :

SELECT users.name as user_name, sons.name as son_name

Assemblons tout ensemble et nous obtenons la requête suivante :

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

Tâches pratiques

Supposons que nous ayons des catégories. Chaque catégorie peut appartenir à une catégorie parente, qui à son tour peut avoir sa propre catégorie parente et ainsi de suite. Décrivez la structure de stockage.

Écrivez une requête qui récupérera une catégorie ainsi que sa catégorie parente.

Écrivez une requête qui récupérera une catégorie ainsi que son parent et son grand-parent.

Écrivez une requête qui récupérera une catégorie ainsi que son parent, son grand-parent et son arrière-grand-parent.

bydeenesfrptru