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

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

sqlSELECT *

Aby se data vybírala ze všech tabulek, je třeba před * uvést jméno tabulky pro výběr:

sqlSELECT users.*, cities.*

Nebo můžete vypsat potřebná pole s uvedením jména tabulky před nimi:

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

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

sqlON cities.id=users.city_id

Dotaz

Výsledný dotaz, který načte uživatele spolu s jejich městy bude vypadat následovně:

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

Praktické úlohy

Задание 1

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.