Pridobivanje podatkov iz povezanih tabel v PHP-ju
Naredimo poizvedbo, ki bo pridobila
vse uporabnike skupaj z njihovimi mesti. Za to
bomo potrebovali ukaz LEFT
JOIN:
Njen sintaksa je naslednja:
SELECT polja FROM ime_tabele
LEFT JOIN ime_povezane_tabele ON pogoj_povezave
WHERE pogoj_izbire
Razložimo posamezne dele sintakse tega ukaza.
Polja
Ker izbira poteka iz več tabel,
izbira vseh polj prek * ne bo
delovala. Naslednja poizvedba bo izbrala polja samo
iz glavne tabele, ne pa iz povezane:
SELECT *
Da se podatki izberejo iz vseh
tabel, je treba pred * navesti ime
tabele za izbiro:
SELECT users.*, cities.*
Lahko pa naštejemo polja, ki jih potrebujemo, z navedbo imena tabele pred njimi:
SELECT users.name, cities.name
Ti dve metodi imata težavo. Bistvo je v tem, da če imajo polja v tabelah enaka imena, bo v matriki PHP-ja prišlo do konflikta imen in zmagalo bo le eno polje, drugega pa ne bo.
Za rešitev problema je treba konfliktna imena
preimenovati z ukazom as:
SELECT users.name, cities.name as city_name
Povezava
Po ukazu ON moramo navesti
polja iz dveh tabel, po katerih se izvaja
povezava. V našem primeru bo to polje id
iz tabele z mesti in polje city_id
iz tabele z uporabniki:
ON cities.id=users.city_id
Poizvedba
Kot rezultat bo poizvedba, ki bo pridobila uporabnike skupaj z njihovimi mesti, videti takole:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktične naloge
Recimo, da imate tabelo z izdelki in tabelo z njihovimi kategorijami. Napišite poizvedbo, ki bo pridobila imena izdelkov skupaj z njihovimi kategorijami.