Gegevens ophalen uit gerelateerde tabellen in PHP

Laten we een query maken die alle gebruikers ophaalt samen met hun steden. Hiervoor hebben we de opdracht LEFT JOIN nodig:

De syntaxis ziet er als volgt uit:

sqlSELECT velden FROM tabel_naam
  LEFT JOIN gerelateerde_tabel_naam ON koppel_voorwaarde 
WHERE selectie_voorwaarde

Laten we de afzonderlijke onderdelen van de syntaxis van deze opdracht bekijken.

Velden

Omdat de selectie uit meerdere tabellen komt, werkt het selecteren van alle velden met * niet. De volgende query selecteert alleen velden uit de hoofdtabel, maar niet uit de gerelateerde tabel:

sqlSELECT *

Om gegevens uit alle tabellen te selecteren, moet je voor * de tabelnaam specificeren voor de selectie:

sqlSELECT users.*, cities.*

Of je kunt de gewenste velden opsommen met vermelding van de tabelnaam ervoor:

sqlSELECT users.name, cities.name

Deze twee methoden hebben een probleem. Het punt is dat als velden in de tabellen dezelfde namen hebben, er in de PHP-array een naamconflict ontstaat en slechts één veld 'wint', terwijl het tweede veld niet aanwezig zal zijn.

Om dit probleem op te lossen, moeten conflicterende namen worden hernoemd met de opdracht as:

sqlSELECT users.name, cities.name as city_name

Relatie

Na de opdracht ON moeten we de velden uit de twee tabellen specificeren waarlangs de koppeling plaatsvindt. In ons geval is dit het veld id uit de tabel met steden en het veld city_id uit de tabel met gebruikers:

sqlON cities.id=users.city_id

Query

Uiteindelijk ziet de query die de gebruikers samen met hun steden ophaalt er als volgt uit:

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

Praktische opdrachten

Задание 1

Stel dat je een tabel met producten en een tabel met hun categorieën hebt. Schrijf een query die de productnamen ophaalt samen met hun categorieën.