- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Как удалить плохие SEO-ссылки и очистить ссылочную массу сайта
Применяем отклонение ссылок
Сервис Rookee
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Всем добрый вечер. Необходимо реализовать сортировки для ИМ, имеем табличку с привязкой товар-сортировка-номер_сортировки
необходимо минимальными телодвижениями получить все товары, которые удовлетворяют всем заданным сортировкам. Пробовал использовать UNION в запросе, но он возвращает id если выполнилось хотя бы одно условие, мне же нужно чтобы выполнились все.
Пока что приходит в голову это делать запрос по каждой сортировке и получить итог через array_intersect(), но что-то мне подсказывает есть более изящные решения. Есть так же мысль использовать вложенные запросы, но до меня пока не допетрит как в 1 запрос можно выбрать product_id, который удовлетворяет сразу всем сортировкам.
Господа колдуны mysql, что скажите?
пы.сы. Товаров планируется за 150тыс+, привязанных сортировок соответственно миллион-полтора.
Вы бы поподробнее объяснили что надо.
Из фразы:
мало что понятно.
Нужно составить запрос, который сможет выбрать только те product_id, которые удовлетворяют сразу нескольким условиям (например):
WHERE ( sort_id =5 AND value_id IN ( 1, 2, 3, 5, 7, 11, 10, 13, 15, 17, 20 ))
WHERE ( sort_id =3 AND value_id IN ( 1, 2, 3, 5, 7, 9, 15, 10 ))
WHERE ( sort_id =1 AND value_id IN ( 3, 4, 11, 14, 15, 13, 16, 2 ))
Так надеюсь понятней будет.
Ну вы же их сами составили или в чём проблема то?
Что то не понял, а почему не так?
WHERE ( sort_id =5 AND value_id IN ( 1, 2, 3, 5, 7, 11, 10, 13, 15, 17, 20 ))
OR
( sort_id =3 AND value_id IN ( 1, 2, 3, 5, 7, 9, 15, 10 ))
OR
( sort_id =1 AND value_id IN ( 3, 4, 11, 14, 15, 13, 16, 2 ))
WHERE ( sort_id =5 AND value_id IN ( 1, 2, 3, 5, 7, 11, 10, 13, 15, 17, 20 ))
OR
( sort_id =3 AND value_id IN ( 1, 2, 3, 5, 7, 9, 15, 10 ))
OR
( sort_id =1 AND value_id IN ( 3, 4, 11, 14, 15, 13, 16, 2 ))
OR вернет результат если выполнится хоть 1 сортировка, мне же нужно чтобы выполнились все
>>Что то не понял, а почему не так?
Посмотрите на структуру базы, это первое что мне пришло в голову. Но не может быть sort_id одновременно быть равным 5 и 3 и 1
>>Ну вы же их сами составили или в чём проблема то?
Один красивый запрос
Нашел аналог UNION, который работает по обратному принципу (возвращает результат если выполнились все условия) - INTERSECT, но он есть везде кроме mysql =(
Я вижу только одну таблицу, а не структуру базы. В таблице как раз product_id со значением 1 имеет в поле sort_id значения и 5 и 3 и 1.
Мы работаем конкретно с этой таблицей.
sort_id - сортировка
value_id - номер сортировки, закрепленной за product_id
нужно в один запрос получить product_id, который удовлетворит сразу трем условиям. Проблема в том, что это разные строки, и AND и OR тут не канают. UNION возвращает результат если выполнится хотябы одно условие из трех
а в чём обязанность всё это сделать в 1 запрос? Фейшунисты?
Ну...
Надеюсь идея понятна?
Distinct - для трех запросов