Hent data fra relaterede tabeller i PHP
Lad os lave en forespørgsel, der henter
alle brugere sammen med deres byer. Til dette
har vi brug for kommandoen LEFT
JOIN:
Dens syntaks ser ud som følger:
SELECT felter FROM tabel_navn
LEFT JOIN relateret_tabel_navn ON betingelse_for_relation
WHERE betingelse_for_udvælgelse
Lad os gennemgå de enkelte dele af syntaksen for denne kommando.
Felter
Da der vælges data fra flere tabeller,
vil udvælgelse af alle felter via * ikke
virke. Følgende forespørgsel vil kun vælge felter
fra hovedtabellen, men ikke fra den relaterede tabel:
SELECT *
For at data skal hentes fra alle
tabeller, skal du før * angive navnet
på tabellen, der skal hentes fra:
SELECT users.*, cities.*
Alternativt kan du liste de felter, vi har brug for, med angivelse af tabelnavn foran dem:
SELECT users.name, cities.name
Disse to metoder har et problem. Kort fortalt, hvis felter i tabellerne har identiske navne, vil der i PHP-arrayet opstå en navnekonflikt, og kun ét felt vil "vinde", og det andet vil ikke være til stede.
For at løse problemet skal de konfliktfyldte navne
omdøbes via kommandoen as:
SELECT users.name, cities.name as city_name
Relation
Efter kommandoen ON skal vi angive
felter fra de to tabeller, som relationen skabes
imellem. I vores tilfælde vil det være feltet id
fra by-tabellen og feltet city_id
fra bruger-tabellen:
ON cities.id=users.city_id
Forespørgsel
I sidste ende vil forespørgslen, der henter brugerne sammen med deres byer, se ud som følger:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktiske opgaver
Antag, at du har en tabel med varer og en tabel med deres kategorier. Skriv en forespørgsel, der henter varenavnene sammen med deres kategorier.