Для получения информации о товаре, его категории и фильтрах в одном запросе вам необходимо использовать соединение таблиц и подзапросы.
Вам понадобятся три таблицы: 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. Запрос вернет полную информацию о товаре, его категории и фильтрах в одном результате.