Získávání dat z propojených tabulek v PHP
Pojďme vytvořit dotaz, který načte
všechny uživatele spolu s jejich městy. K tomu
budeme potřebovat příkaz LEFT
JOIN:
Jeho syntaxe vypadá následovně:
SELECT pole FROM jméno_tabulky
LEFT JOIN jméno_propojené_tabulky ON podmínka_propojení
WHERE podmínka_výběru
Pojďme si rozebrat jednotlivé části syntaxe tohoto příkazu.
Pole
Protože se výběr provádí z několika tabulek,
výběr všech polí pomocí * nebude
fungovat. Následující dotaz vybere pole pouze
z hlavní tabulky, ale ne z propojené:
SELECT *
Aby se data vybírala ze všech
tabulek, je třeba před * uvést jméno
tabulky pro výběr:
SELECT users.*, cities.*
Nebo můžete vypsat potřebná pole s uvedením jména tabulky před nimi:
SELECT users.name, cities.name
Tyto dva způsoby mají problém. Jde o to, že pokud pole v tabulkách mají stejná jména, dojde v poli PHP ke konfliktu jmén a vyhraje pouze jedno pole, a druhého nebude.
Pro vyřešení problému je třeba konfliktní jména
přejmenovat pomocí příkazu as:
SELECT users.name, cities.name as city_name
Propojení
Po příkazu ON musíme uvést
pole ze dvou tabulek, pomocí kterých se provádí
propojení. V našem případě to bude pole id
z tabulky s městy a pole city_id
z tabulky s uživateli:
ON cities.id=users.city_id
Dotaz
Výsledný dotaz, který načte uživatele spolu s jejich městy bude vypadat následovně:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Praktické úlohy
Předpokládejme, že máte tabulku se zbožím a tabulku s jejich kategoriemi. Napište dotaz, který načte názvy zboží spolu s jejich kategoriemi.