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 :

sqlSELECT 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 :

sqlSELECT *

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 :

sqlSELECT users.*, cities.*

Ou bien, on peut énumérer les champs dont nous avons besoin en précisant le nom de la table devant eux :

sqlSELECT 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 :

sqlSELECT 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 :

sqlON cities.id=users.city_id

Requête

Au final, la requête qui récupérera les utilisateurs avec leurs villes ressemblera à ceci :

sqlSELECT 
  users.name, cities.name as city_name
FROM 
  users
LEFT JOIN cities ON cities.id=users.city_id

Tâches pratiques

Задание 1

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.