Как получить множество строк из одной таблицы для каждой строки из другой?

216
19 декабря 2016, 19:30

Есть таблица с объявлениями, для каждого объявления есть несколько категорий, все категории хранятся в одной таблице. У таблицы объявлений и категорий есть связующая. Как получить нужные объявления и категории к ним в один запрос?

К примеру:

Таблица объявлений Ads содержит поля:
id
title
...
Таблица категорий Categories:
id
title
parent_id
Таблица связующая Ads_categories:
id
ads_id
categories_id

Максимум, чего я добился: выбирается объявление с одной категорией, и дублируются, пока не выведет остальные категории этого объявления, и так для каждого объявления.

Дополнение. Я использовал join, и мой запрос похож на тот, что написал товарищ ниже, и вот что я получаю:

Array
(
[0] => Array
    (
        [ads] => Array
            (
                [id] => 3
                [title] => Продам гараж
                [description] => ...
                [cities_id] => 468
                [users_id] => 12
                [price] => 120000
                [datetime] => 2016-01-31 04:12:07
            )
        [ads_categories] => Array
            (
                [id] => 1
                [ads_id] => 3
                [categories_id] => 2
            )
        [categories] => Array
            (
                [id] => 2
                [title] => Недвижимость
                [parent_id] => 0
            )
    )
[1] => Array
    (
        [ads] => Array
            (
                [id] => 3
                [title] => Продам гараж
                [description] => ...
                [cities_id] => 468
                [users_id] => 12
                [price] => 120000
                [datetime] => 2016-01-31 04:12:07
            )
        [ads_categories] => Array
            (
                [id] => 2
                [ads_id] => 3
                [categories_id] => 16
            )
        [categories] => Array
            (
                [id] => 16
                [title] => Квартиры
                [parent_id] => 2
            )
    )
[2] => Array
    (
        [ads] => Array
            (
                [id] => 3
                [title] => Продам гараж
                [description] => ...
                [cities_id] => 468
                [users_id] => 12
                [price] => 120000
                [datetime] => 2016-01-31 04:12:07
            )
        [ads_categories] => Array
            (
                [id] => 3
                [ads_id] => 3
                [categories_id] => 101
            )
        [categories] => Array
            (
                [id] => 101
                [title] => Куплю
                [parent_id] => 16
            )
    )
)

Вот меня интересует, можно ли получить один массив Ads в котором будут сразу все три категории?

Answer 1

Вам нужно изучить использование оператора join Для вашего случая запрос будет выглядеть приблизительно так:

SELECT
  *
FROM
  Ads
  LEFT JOIN Ads_categories ON ads_id=Ads.id
  LEFT JOIN Categories ON Categories.id=categories_id
WHERE 
  categories_id=X
READ ALSO
PHP shell_exec выполнение консольной команды

PHP shell_exec выполнение консольной команды

Пытаюсь написать выполнение консольной команды после нажатия на кнопкуВот что получилось

680
COOKIE хранятся в пределах одной папки

COOKIE хранятся в пределах одной папки

Такая проблема: COOKIE почему-то хранятся только в пределах одной папкиНапример, на сайте перешел в папку site

153
Переадресация и разные домены

Переадресация и разные домены

Пользователь заходит на главный сайт (xxxru), на нем он регистрируется и открывает виртуальную компанию - после регистрации ему должен выделяться...

178