Andmete hankimine seotud tabelitest PHP-s
Teeme päringu, mis toob kõik
kasutajad koos nende linnadega. Selleks
vajame käsku LEFT
JOIN:
Selle süntaks on järgmine:
SELECT väljad FROM tabeli_nimi
LEFT JOIN seotud_tabeli_nimi ON seosingutingimus
WHERE valikutingimus
Vaatame üle selle käsu süntaksi üksikosad.
Väljad
Kuna valik tehakse mitmest tabelist,
siis kõigi väljade valimine läbi * ei
toimi. Järgmine päring valib väljad ainult
põhitabelist, mitte seotud tabelist:
SELECT *
Selleks, et andmeid kõigist
tabelitest valitaks, tuleb enne * määrata
tabeli nimi, millest valida:
SELECT users.*, cities.*
Või saab loetleda vajalikud väljad koos nende ees oleva tabeli nimega:
SELECT users.name, cities.name
Neil kahel viisil on probleem. Asi on selles, et kui väljad tabelites on samanimelised, siis PHP massiivis tekib nimede konflikt ja võidab ainult üks väli, teist aga ei ole.
Probleemi lahendamiseks tuleb konfliktseid nimesid
ümber nimetada läbi käsu as:
SELECT users.name, cities.name as city_name
Seos
Pärast käsku ON peame määrama
väljad kahest tabelist, mille kaudu seos
luuakse. Meie puhul on see väli id
linnade tabelist ja väli city_id
kasutajate tabelist:
ON cities.id=users.city_id
Päring
Lõpuks näeb päring, mis toob kasutajad koos nende linnadega, välja järgmine:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktilised ülesanded
Olgemel on tabel toodetega ja tabel nende kategooriatega. Kirjutage päring, mis toob toodete nimed koos nende kategooriatega.