Získavanie údajov z prepojených tabuliek v PHP
Urobme požiadavku, ktorá načíta
všetkých používateľov spolu s ich mestami. Na to
potrebujeme príkaz LEFT
JOIN:
Jeho syntax vyzerá nasledovne:
SELECT polia FROM nazov_tabulky
LEFT JOIN nazov_prepojenej_tabulky ON podmienka_prepojenia
WHERE podmienka_vyberu
Poďme si rozobrať jednotlivé časti syntaxe tohto príkazu.
Polia
Pretože výber ide z viacerých tabuliek,
výber všetkých polí pomocou * nebude
fungovať. Nasledujúca požiadavka vyberie polia iba
z hlavnej tabuľky, ale nie z prepojenej:
SELECT *
Aby sa údaje vyberali zo všetkých
tabuliek, je potrebné pred * uviesť názov
tabuľky pre výber:
SELECT users.*, cities.*
Alebo je možné vymenovať potrebné polia s uvedením názvu tabuľky pred nimi:
SELECT users.name, cities.name
Tieto dva spôsoby majú problém. Faktom je, že ak polia v tabuľkách majú rovnaké názvy, v poli PHP dôjde ku konfliktu názvov a vyhrá iba jedno pole, a druhého nebude.
Na vyriešenie problému je potrebné konfliktné názvy
premenovať pomocou príkazu as:
SELECT users.name, cities.name as city_name
Prepojenie
Po príkaze ON musíme uviesť
polia z dvoch tabuliek, podľa ktorých sa uskutočňuje
prepojenie. V našom prípade to bude pole id
z tabuľky s mestami a pole city_id
z tabuľky s používateľmi:
ON cities.id=users.city_id
Požiadavka
Výsledná požiadavka, ktorá načíta používateľov spolu s ich mestami bude vyzerať nasledovne:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktické úlohy
Predpokladajme, že máte tabuľku s produktami a tabuľku s ich kategóriami. Napíšte požiadavku, ktorá načíta názvy produktov spolu s ich kategóriami.