У меня 2 таблицы:

1. products
- product_id
- title
2. product_categories
- product_id
- category_id

У каждого продукта может быть более одной категории. Я храню эту информацию в таблице product_categories. Я хочу иметь возможность ВЫБРАТЬ все идентификаторы категорий при выборе продукта в 1 запросе. Как я могу это сделать? Пока у меня есть следующее, но он выберет только 1 идентификатор категории:

SELECT
  p.*,
  (SELECT
     category_id
   FROM 
     product_categories
   WHERE product_id = p.product_id) as category_ids
FROM
   products AS p
0
David 5 Мар 2010 в 17:08
Как вы хотите, чтобы результат выглядел? Пример поможет.
 – 
Ike Walker
5 Мар 2010 в 17:52
Как многотонный массив для каждой строки. Таким образом, всю общую информацию о продукте можно получить в PHP, например, $ row ['title'], но категории будут дополнительным массивом. $ Row ['product_categories'] [0] получит идентификатор первой категории продукта.
 – 
David
5 Мар 2010 в 17:55

2 ответа

Лучший ответ

Вы можете использовать левое соединение, Group By и GROUP_CONCAT

Как использовать GROUP BY для объединения строк в MySQL?

SELECT products.*, GROUP_CONCAT(category_id SEPARATOR ' ')
FROM products LEFT JOIN product_categories
                ON product_categories.product_id = products.product_id
GROUP BY product_id;
0
Community 23 Май 2017 в 15:07
Очень близко к тому, что мне нужно, однако мне нужно вернуть его как массив. Я буду использовать его с типом данных MVA от sphinx.
 – 
David
5 Мар 2010 в 17:32

Выберите продукты. *, product_categories из левого внешнего соединения product_categories в product_categories.product_id = products.product_id

0
Axarydax 5 Мар 2010 в 17:12