social_project
Новичок
Приветствую. Помогите пожалуйста с WHEN и HAVING кодом.
В общем суть такова, это поисковый фильтр, и пока человек не выберет несколько возможныж значений, все работает верно, но когда есть процедура OR в условиях, то count может вернуть не 3 а только 1 вхождение например, ну т.е. тогда увеличивать число HAVING count > 1 нельзя. Как тогда сделать что бы в выборке одно условие с OR считалось как 1 в выдаче?
Если не совсем понятно описал то вот пример:
есть товар СМАРТФОН, и значения РАЗМЕР и ЦВЕТ. Если выбран РАЗМЕР 220см, то первая выдача верная и HAVING count > 1 верно. Если выбрать еще цвет, СИНИЙ напрмиер то тоже все ок, HAVING count > 1 снова 1. Но если ставят два цвета "СИНИЙ, ЗЕЛЕНЫЙ" то HAVING count надо ставить уже 2, но тут проблема т.к. тогда покажет куча лишних вхождений т.е. элемент OR тогда я снова делать -1 от финального значения, т.е. HAVING count > 1 но тогда в выдаче бывает каша т.е. берутся уже левые товары в выдаче.
Как-то можно объединить эти элементы по GROUP внутри WHEN или как обойти данную ошибку?
В общем суть такова, это поисковый фильтр, и пока человек не выберет несколько возможныж значений, все работает верно, но когда есть процедура OR в условиях, то count может вернуть не 3 а только 1 вхождение например, ну т.е. тогда увеличивать число HAVING count > 1 нельзя. Как тогда сделать что бы в выборке одно условие с OR считалось как 1 в выдаче?
Если не совсем понятно описал то вот пример:
есть товар СМАРТФОН, и значения РАЗМЕР и ЦВЕТ. Если выбран РАЗМЕР 220см, то первая выдача верная и HAVING count > 1 верно. Если выбрать еще цвет, СИНИЙ напрмиер то тоже все ок, HAVING count > 1 снова 1. Но если ставят два цвета "СИНИЙ, ЗЕЛЕНЫЙ" то HAVING count надо ставить уже 2, но тут проблема т.к. тогда покажет куча лишних вхождений т.е. элемент OR тогда я снова делать -1 от финального значения, т.е. HAVING count > 1 но тогда в выдаче бывает каша т.е. берутся уже левые товары в выдаче.
Как-то можно объединить эти элементы по GROUP внутри WHEN или как обойти данную ошибку?
Код:
(SELECT scp.`shop_cat_page_id` , COUNT(*) as count FROM `shop_catalog_page` AS `scp`
INNER JOIN shop_catalog_page_properties AS scpp ON scpp.shop_catalog_page_properties_producer_extend = scp.shop_cat_page_producer_extend AND scpp.shop_catalog_page_properties_product_id = scp.shop_cat_page_id AND (
CASE
WHEN shop_catalog_page_properties_parentid='748' THEN ( shop_catalog_page_properties_types_value_int='2954' )
WHEN shop_catalog_page_properties_parentid='747' THEN ( shop_catalog_page_properties_types_value_int='2694' OR shop_catalog_page_properties_types_value_int='2695' OR shop_catalog_page_properties_types_value_int='2700' )
ELSE NULL
END
)
WHERE shop_cat_page_product_type="629"
GROUP BY shop_cat_page_id
HAVING count > 1
)