Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 17.10.2014
Сообщений: 23

Фильтрование продуктов

15.05.2015, 00:28. Показов 476. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется таблица products_filters, в ней такая структура - id, product_id (ссылка на продукт из таблицы products), filter_value_id (ссылка на фильтр из таблицы filters_values).

Задача: Правильно отфильтровать продукты по выбранным фильтрам.
Фильтры делятся на группы, допустим - производитель: США, Россия. Размер: Маленький, средний, большой.
Фильтры (Производитель, Размер) хранятся в таблице filters.
Значения фильтров (США, Россия) в таблице filters_values.

Сейчас на сервер приходит такое содержимое выбранных фильтров
[fid_1] => array(1, 3),
[fid_2] => array(4, 6, 8);

где fid_1 и fid_2 - это id фильтров из таблицы filters (например 1 и 2).
Если эти данные использовать в запросе с IN(1, 3, 4, 6, 8), то мы получаем id продуктов из всех категорий, а это не правильно. Нужно чтобы если выбрали США и маленький размер, то выводились только те продукты которые имеют фильтр и США и Маленький одновременно.

Уже битый час мучаюсь с этим запросом, не могу сообразить как правильно реализовать. Помогите, пожалуйста!

Добавлено через 45 минут
Сделал следующим образом, поправьте, пожалуйста, если можно этот запрос оптимизировать
SQL
1
SELECT f.id,f.product_id FROM products_filters AS f WHERE filter_value_id IN(250) AND EXISTS( (SELECT f0.product_id FROM products_filters AS f0 WHERE f0.product_id = f.product_id AND filter_value_id IN(151) ) )
Вот эта часть:
SQL
1
AND EXISTS( (SELECT f0.product_id FROM products_filters AS f0 WHERE f0.product_id = f.product_id AND filter_value_id IN(151) ) )
Добавляется в цикле, т.е. если выберем еще одну группу фильтров, то получим плюс еще одну такую строчку.

Не оставляет мысль что можно сделать проще
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2015, 00:28
Ответы с готовыми решениями:

Отображение продуктов и форма добавления новых
Хелп! Бился , не знаю как сделать. Нужно сделать такой проект. Там есть два текстовых поля, в первое поля вводится название,...

Интернет-магазин Малинка для продажи продуктов (не локально)
создать интернет магазин Малинка для продажи продуктов на главной странице вкладка главная: акции скидки и тд вкладка О...

Фильтрование по времени
Создал базу с помощь TClientDataSet, есть поле Дата, есть два DateEdit, нужно фильтровать от первой даты до другой. ds1.Filter:='...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2015, 00:28
Помогаю со студенческими работами здесь

Фильтрование и SQL запросы
Здравствуйте! Подскажите как реализовать следующее: Допустим есть таблица "Книги", она состоит из: индекса...

Фильтрование списка с сохранением id итема
Пишу программу в которой есть listview, в котором n строчек - итемов. каждый итем имеет свой id. Когда я фильтрую листвью то итем, который...

Датчик Холтера (ЭКГ), фильтрование данных
Кто подскажет как нужно фильтровать данные полученные от датчика Холтера (500Гц, несколько каналов АЦП по 16 бит) чтобы убрать помехи? В...

Фильтрование приложений по идентификаторам пакетов в окне "Поделиться"
В общем, проблема такова: для "репоста" в своём приложении использую конструкцию вида Intent shareIntent = new...

Учёт продуктов
Добрый день! Потихоньку углубляюсь в разработку БД. Следующий этап - создание БД "Складской учёт". Задача реализовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru