Dobijanje podataka iz povezanih tabela u PHP

Hajde da napravimo upit koji će izvući sve korisnike zajedno sa njihovim gradovima. Za ovo će nam trebati komanda LEFT JOIN:

Njen sintaks izgleda na sledeći način:

sqlSELECT polja FROM ime_tabele
  LEFT JOIN ime_povezane_tabele ON uslov_povezivanja 
WHERE uslov_izbora

Hajde da analiziramo pojedinačne delove sintakse ove komande.

Polja

Pošto se izbor vrši iz nekoliko tabela, izbor svih polja preko * neće raditi. Sledeći upit će izabrati polja samo iz glavne tabele, ali ne i iz povezane:

sqlSELECT *

Da bi se podaci biral iz svih tabela, potrebno je pre * navedite ime tabele za izbor:

sqlSELECT users.*, cities.*

Ili možete navesti potrebna polja sa navedenim imenom tabele ispred njih:

sqlSELECT users.name, cities.name

Ova dva načina imaju problem. Problem je u tome da ako polja u tabelama imaju identična imena, onda će u PHP nizu doći do sukoba imena i samo jedno polje će pobediti, a drugog neće biti.

Za rešavanje problema potrebno je sukobljena imena preimenovati preko komande as:

sqlSELECT users.name, cities.name as city_name

Veza

Posle komande ON moramo navesti polja iz dve tabele, preko kojih se ostvaruje veza. U našem slučaju to će biti polje id iz tabele sa gradovima i polje city_id iz tabele sa korisnicima:

sqlON cities.id=users.city_id

Upit

Kao rezultat, upit koji će izvući korisnike zajedno sa njihovim gradovima izgledaće na sledeći način:

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

Praktični zadaci

Задание 1

Neka postoji tabela sa proizvodima i tabela sa njihovim kategorijama. Napišite upit koji će izvući nazive proizvoda zajedno sa njihovim kategorijama.