@Pupochkin123

Поиск по нескольким свойствам по динамическим записям?

Как произвести поиск по полному совпадению в условии по нескольким параметрам?
таблица
vzrgoomme1shieblbczytntsg9y.png

Как вернуть количество только в случае его полного совпадения по всем полям?
Пробую вот так, выбранные результаты соответствуют всем критериям, но возвращается 0.
SELECT COUNT(*) FROM product_options AS PO
WHERE
(PO.classifier_id = 1 AND PO.option_id IN (5))
AND
(PO.classifier_id = 3 AND PO.option_id IN (29))
AND
(PO.classifier_id = 4 AND PO.option_id IN (55, 57, 59))
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
SELECT COUNT(*) 
  FROM product_options AS PO
    JOIN product_options AS P1 ON P0.product_id = P1.product_id
    JOIN product_options AS P2 ON P0.product_id = P2.product_id
  WHERE
    (PO.classifier_id = 1 AND PO.option_id IN (5))
    AND
    (P1.classifier_id = 3 AND P1.option_id IN (29))
    AND
    (P2.classifier_id = 4 AND P2.option_id IN (55, 57, 59))
Ответ написан
Комментировать
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Тут у многих правильная мысль, что надо считать количество, но все считают общее.
А надо по каждому свойству отдельно.

В принципе, поиск по одному значению - это просто, по джойну на каждое свойство. Но вот когда выбор из нескольких...
Как-то так должно по идее работать
SELECT p.*, sum(po1.classifier_id=1) num1, sum(po2.classifier_id=2) num2 FROM products p
    left JOIN product_options po1 on po1.product_id = id and po1.classifier_id=1 and po1.option_id in (1,2)
    left JOIN product_options po2 on po2.product_id = id and po2.classifier_id=2 and po2.option_id in (10,11)
group by id having num1 > 1 and num2 > 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы