Принятый ответ от @ goggin13 выглядит неправильно. Другие решения, предоставленные на сегодняшний день, будут работать, но страдают от проблемы n + 1 и, как таковые, страдают от снижения производительности.
n + 1 проблема: если есть 100 категорий, то нам нужно сделать 1 выбор, чтобы получить категории, а затем для каждой из 100 возвращенных категорий нам нужно сделать выбор, чтобы получить продукты в этой категории. , Таким образом, будет выполнено 101 запрос SELECT.
Мое альтернативное решение решает проблему n + 1 и, следовательно, должно быть значительно более эффективным, поскольку выполняются только 2 выбора.
SELECT
*
FROM
(SELECT c.id, c.title, p.id AS product_id, p.title
FROM categories AS c
JOIN products AS p ON c.id = p.category_id
ORDER BY c.id ASC) AS a
GROUP BY id;