# Получении данных из связанных таблиц в 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`

## Практические задачи

Пусть у вас есть таблица с товарами и таблица с их категориями. Напишите запрос, который достанет названия товаров вместе с их категориями.

← →
↑