SQL запрос для фильтра товаров - MySQL
Формулировка задачи:
Добрый день. Я сейчас занимаюсь разработкой сайта с каталогом товаров и в данный момент застрял на поисковом фильтре. Имеется база данных, структура изображена на картинке. Имеется панель фильтрации на сайте, внешний вид также изображен на картинке. Работать все должно следующим образом:
Если я выбираю в параметре "скорость коммутационной матрицы" значение "48 Гбит/с", то должны отображаться только те товары, у которых этот параметр имеет значение "48 Гбит/с". Соответственно, если помимо этого параметра я еще выбираю в параметре "емкость таблицы MAC-адресов" значение "16к", то должны отображаться только те товары, у которых скорость коммутационной матрицы = 48 Гбит/c и емкость таблицы MAC-адресов = 16к. Сейчас же в пределах одного параметра фильтр работает нормально, но если отметить значения в других фильтрах, то все начинает смешиваться.
Пример запроса выглядит так: Помогите пожалуйста составить корректный запрос. Спасибо.
"select `goods`.* from `goods` inner join `properties_goods` on `properties_goods`.`good_id` = `goods`.`id` inner join `properties` on `properties`.`id` = `properties_goods`.`property_id` where properties.id = 6 AND properties_goods.value = '48 Гбит/с' OR properties.id = 7 AND properties_goods.value = '32k' group by `id`"
Решение задачи: «SQL запрос для фильтра товаров»
textual
Листинг программы
"select `goods`.* from `goods` inner join `properties_goods` on `properties_goods`.`good_id` = `goods`.`id` where properties_goods.id = 6 AND properties_goods.value = '48 Гбит/с' OR properties_goods.id = 7 AND properties_goods.value = '32k' group by `id`"
Объяснение кода листинга программы
В представленном коде выполняется запрос к базе данных с использованием языка SQL. Весь запрос состоит из нескольких основных частей, которые выполняют следующие действия:
- Выборка данных:
select
goods.*
- выбираются все поля таблицыgoods
.from
goods'- указывается, что данные берутся из таблицы
goods`.
- Связь с другой таблицей:
inner join
properties_goodson
properties_goods.
good_id=
goods.
id'- устанавливается связь между таблицами
goodsи
properties_goodsпо полю
good_idи
id` соответственно.
- Фильтрация данных:
where properties_goods.id = 6 AND properties_goods.value = '48 Гбит/с'
- выполняется фильтрация товаров по заданным параметрам:id
равный 6 иvalue
равный '48 Гбит/с'.OR properties_goods.id = 7 AND properties_goods.value = '32k'
- выполняется дополнительная фильтрация товаров по заданным параметрам:id
равный 7 иvalue
равный '32k'.
- Группировка данных:
group by
id'- данные группируются по полю
id`. Таким образом, в результате выполнения данного запроса будет получен список товаров, которые соответствуют заданным параметрам.