Атрыманне дадзеных з звязаных табліц у 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
Практычныя задачы
Няхай у вас ёсць табліца з таварамі і табліца з іх катэгорыямі. Напішыце запыт, які дастане назвы тавараў разам з іх катэгорыямі.