Добивање на податоци од поврзани табели во PHP

Ајде да направиме барање, кое ќе ги земе сите корисници заедно со нивните градови. За ова ние ќе треба командата LEFT JOIN:

Нејзиниот синтаксис изгледа на следниов начин:

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

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

Полиња

Бидејќи селекцијата е од неколку табели, селекцијата на сите полиња преку * нема да работи. Следното барање ќе ги избере полињата само од главната табела, но не и од поврзаната:

sqlSELECT *

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

sqlSELECT users.*, cities.*

Или може да се наведат потребните ни полиња со наведување на името на табелата пред нив:

sqlSELECT users.name, cities.name

Овие два начина имаат проблем. Работата е во тоа, што ако полињата во табелите имаат исти имиња, тогаш во array-то во 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

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