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:
SELECT 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:
SELECT *
Da bi se podaci biral iz svih
tabela, potrebno je pre * navedite ime
tabele za izbor:
SELECT users.*, cities.*
Ili možete navesti potrebna polja sa navedenim imenom tabele ispred njih:
SELECT 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:
SELECT 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:
ON 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:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktični zadaci
Neka postoji tabela sa proizvodima i tabela sa njihovim kategorijama. Napišite upit koji će izvući nazive proizvoda zajedno sa njihovim kategorijama.