Добивање на податоци од поврзани табели во PHP
Ајде да направиме барање, кое ќе ги земе
сите корисници заедно со нивните градови. За ова
ние ќе треба командата LEFT
JOIN:
Нејзиниот синтаксис изгледа на следниов начин:
SELECT полиња FROM име_на_табела
LEFT JOIN име_на_поврзана_табела ON услов_за_поврзување
WHERE услов_за_селекција
Ајде да ги разгледаме поединечните делови од синтаксата на оваа команда.
Полиња
Бидејќи селекцијата е од неколку табели,
селекцијата на сите полиња преку * нема
да работи. Следното барање ќе ги избере полињата само
од главната табела, но не и од поврзаната:
SELECT *
За да може податоците да се изберат од сите
табели, потребно е пред * да се наведе името
на табелата за селекција:
SELECT users.*, cities.*
Или може да се наведат потребните ни полиња со наведување на името на табелата пред нив:
SELECT users.name, cities.name
Овие два начина имаат проблем. Работата е во тоа, што ако полињата во табелите имаат исти имиња, тогаш во array-то во 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
Практични задачи
Нека имате табела со производи и табела со нивните категории. Напишете барање, кое ги зема имињата на производите заедно со нивните категории.