Henting av data fra relaterte tabeller i PHP

La oss lage en spørring som henter alle brukere sammen med deres byer. For å gjøre dette trenger vi LEFT JOIN-kommandoen:

Syntaksen ser slik ut:

sqlSELECT felter FROM tabellnavn
  LEFT JOIN relatert_tabellnavn ON tilkoblingsbetingelse 
WHERE utvalgsbetingelse

La oss gå gjennom delene av syntaksen for denne kommandoen.

Felter

Siden utvalget kommer fra flere tabeller, vil ikke utvalg av alle felter via * fungere. Følgende spørring vil kun velge felter fra hovedtabellen, men ikke fra den relaterte tabellen:

sqlSELECT *

For at data skal hentes fra alle tabeller, må du før * spesifisere tabellnavnet for utvalget:

sqlSELECT users.*, cities.*

Alternativt kan du liste opp de nødvendige feltene med tabellnavnet foran dem:

sqlSELECT users.name, cities.name

Disse to metodene har et problem. Saken er at hvis feltene i tabellene har identiske navn, vil det i PHP-arrayet oppstå en navnekonflikt og kun ett felt vil vinne, mens det andre ikke vil være tilstede.

For å løse problemet må du endre de konfliktfylte navnene via as- kommandoen:

sqlSELECT users.name, cities.name as city_name

Tilkobling

Etter ON- kommandoen må vi spesifisere feltene fra de to tabellene som utgjør tilkoblingen. I vårt tilfelle vil dette være feltet id fra bytabellen og feltet city_id fra brukertabellen:

sqlON cities.id=users.city_id

Spørring

Til slutt vil spørringen som henter brukere sammen med deres byer se slik ut:

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

Praktiske oppgaver

Задание 1

Anta at du har en tabell med produkter og en tabell med deres kategorier. Skriv en spørring som henter produktnavn sammen med deres kategorier.