Как получить одним запросом товар, его категории и фильтры?

Для получения информации о товаре, его категории и фильтрах в одном запросе вам необходимо использовать соединение таблиц и подзапросы.

Вам понадобятся три таблицы: products (таблица товаров), categories (таблица категорий) и filters (таблица фильтров). У каждого товара может быть только одна категория, но может быть несколько фильтров. Следовательно, будет существовать внешний ключ category_id в таблице products, указывающий на соответствующую категорию, и варианты таблицы filters, которые связаны с товаром через таблицу-связь product_filters.

Ниже приведен пример SQL-запроса, который объединяет данные из этих трех таблиц:

SELECT p.id, p.name, c.name AS category, GROUP_CONCAT(f.name) AS filters
FROM products p
JOIN categories c ON p.category_id = c.id
LEFT JOIN product_filters pf ON p.id = pf.product_id
LEFT JOIN filters f ON pf.filter_id = f.id
WHERE p.id = {product_id}
GROUP BY p.id

В этом запросе мы выбираем id и name товара, а также name категории (используя псевдоним category). Мы используем функцию GROUP_CONCAT для объединения имен фильтров через запятую, чтобы получить их в одной строке. Затем мы добавляем условие WHERE для выбора конкретного товара по его id.

Запрос использует ключевые слова JOIN и LEFT JOIN для соединения таблиц и таблицы-связи. JOIN используется для объединения товаров и категорий по общей колонке category_id. LEFT JOIN используется для соединения таблицы-связи product_filters и фильтров по их общей колонке filter_id. Мы используем LEFT JOIN, чтобы учесть случаи, когда у товара нет фильтров.

Наконец, мы группируем результаты по id товара, чтобы получить одну строку на товар.

Вы можете заменить {product_id} на конкретный идентификатор товара, который вам нужно получить информацию, и выполнить этот запрос в вашей базе данных MySQL. Запрос вернет полную информацию о товаре, его категории и фильтрах в одном результате.