Добијање података из повезаних табела у PHP

Хајде да направимо упит који ће извући све кориснике заједно са њиховим градовима. За ово нам је потребна команда LEFT JOIN:

Њен синтакса изгледа на следећи начин:

sqlSELECT поља FROM име_табеле
  LEFT JOIN име_повезане_табеле ON услов_повезивања 
WHERE услов_селекције

Хајде да размотримо појединачне делове синтаксе ове команде.

Поља

Пошто селекција иде из више табела, селекција свих поља кроз * неће радити. Следећи упит ће изабрати поља само из главне табеле, али не и из повезане:

sqlSELECT *

Да би подаци били изабрани из свих табела, потребно је да пред * наведемо име табеле за селекцију:

sqlSELECT users.*, cities.*

Или можемо набројати поља која су нам потребна са навођењем имена табеле пре њих:

sqlSELECT users.name, cities.name

Ова два начина имају проблем. Ствар је у томе, да ако поља у табелама имају иста имена, у низу у PHP-у ће доћи до конфликта имена и победиће само једно поље, а другог неће бити.

За решавање проблема потребно је конфликтна имена преименовати кроз команду as:

sqlSELECT users.name, cities.name as city_name

Повезивање

После команде ON морамо навести поља из две табеле, по којима се остварује веза. У нашем случају то ће бити поље id из табеле са градовима и поље city_id из табеле са корисницима:

sqlON cities.id=users.city_id

Упит

На крају упит, који ће извући кориснике заједно са њиховим градовима изгледаће на следећи начин:

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

Практични задаци

Задание 1

Нека постоји табела са производима и табела са њиховим категоријама. Напишите упит који ће извући називе производа заједно са њиховим категоријама.