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:

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

sqlSELECT *

Aby sa údaje vyberali zo všetkých tabuliek, je potrebné pred * uviesť názov tabuľky pre výber:

sqlSELECT users.*, cities.*

Alebo je možné vymenovať potrebné polia s uvedením názvu tabuľky pred nimi:

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

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

sqlON cities.id=users.city_id

Požiadavka

Výsledná požiadavka, ktorá načíta používateľov spolu s ich mestami bude vyzerať nasledovne:

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

Praktické úlohy

Задание 1

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.