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:

sqlSELECT 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:

sqlSELECT *

Da se podatki izberejo iz vseh tabel, je treba pred * navesti ime tabele za izbiro:

sqlSELECT users.*, cities.*

Lahko pa naštejemo polja, ki jih potrebujemo, z navedbo imena tabele pred njimi:

sqlSELECT 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:

sqlSELECT 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:

sqlON cities.id=users.city_id

Poizvedba

Kot rezultat bo poizvedba, ki bo pridobila uporabnike skupaj z njihovimi mesti, videti takole:

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

Praktične naloge

Задание 1

Recimo, da imate tabelo z izdelki in tabelo z njihovimi kategorijami. Napišite poizvedbo, ki bo pridobila imena izdelkov skupaj z njihovimi kategorijami.