Récupération de données de tables liées en PHP
Faisons une requête qui récupérera
tous les utilisateurs avec leurs villes. Pour cela,
nous aurons besoin de la commande LEFT
JOIN :
Sa syntaxe est la suivante :
SELECT champs FROM nom_table
LEFT JOIN nom_table_liée ON condition_liaison
WHERE condition_sélection
Analysons les différentes parties de la syntaxe de cette commande.
Champs
Comme la sélection se fait à partir de plusieurs tables,
la sélection de tous les champs via * ne
fonctionnera pas. La requête suivante sélectionnera les champs uniquement
de la table principale, mais pas de la table liée :
SELECT *
Pour que les données soient sélectionnées de toutes
les tables, il faut préciser le nom de la table
avant * pour la sélection :
SELECT users.*, cities.*
Ou bien, on peut énumérer les champs dont nous avons besoin en précisant le nom de la table devant eux :
SELECT users.name, cities.name
Ces deux méthodes posent un problème. Le fait est que si les champs dans les tables ont les mêmes noms, alors dans le tableau PHP, il y aura un conflit de noms et un seul champ l'emportera, le second ne sera pas présent.
Pour résoudre le problème, il faut renommer les noms
en conflit via la commande as :
SELECT users.name, cities.name as city_name
Liaison
Après la commande ON, nous devons indiquer
les champs des deux tables sur lesquels s'établit
la liaison. Dans notre cas, ce sera le champ id
de la table des villes et le champ city_id
de la table des utilisateurs :
ON cities.id=users.city_id
Requête
Au final, la requête qui récupérera les utilisateurs avec leurs villes ressemblera à ceci :
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Tâches pratiques
Supposons que vous ayez une table de produits et une table de leurs catégories. Écrivez une requête qui récupérera les noms des produits ainsi que leurs catégories.