Добијање података из повезаних табела у PHP
Хајде да направимо упит који ће извући
све кориснике заједно са њиховим градовима. За ово
нам је потребна команда LEFT
JOIN:
Њен синтакса изгледа на следећи начин:
SELECT поља FROM име_табеле
LEFT JOIN име_повезане_табеле ON услов_повезивања
WHERE услов_селекције
Хајде да размотримо појединачне делове синтаксе ове команде.
Поља
Пошто селекција иде из више табела,
селекција свих поља кроз * неће
радити. Следећи упит ће изабрати поља само
из главне табеле, али не и из повезане:
SELECT *
Да би подаци били изабрани из свих
табела, потребно је да пред * наведемо име
табеле за селекцију:
SELECT users.*, cities.*
Или можемо набројати поља која су нам потребна са навођењем имена табеле пре њих:
SELECT users.name, cities.name
Ова два начина имају проблем. Ствар је у томе, да ако поља у табелама имају иста имена, у низу у PHP-у ће доћи до конфликта имена и победиће само једно поље, а другог неће бити.
За решавање проблема потребно је конфликтна имена
преименовати кроз команду as:
SELECT users.name, cities.name as city_name
Повезивање
После команде ON морамо навести
поља из две табеле, по којима се остварује
веза. У нашем случају то ће бити поље id
из табеле са градовима и поље city_id
из табеле са корисницима:
ON cities.id=users.city_id
Упит
На крају упит, који ће извући кориснике заједно са њиховим градовима изгледаће на следећи начин:
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Практични задаци
Нека постоји табела са производима и табела са њиховим категоријама. Напишите упит који ће извући називе производа заједно са њиховим категоријама.