За последние 24 часа нас посетили 22807 программистов и 1260 роботов. Сейчас ищут 725 программистов ...

HAVIN COUNT и WHEN THEN в MYSQL нужен HELP

Тема в разделе "PHP для профи", создана пользователем social_project, 15 апр 2016.

Метки:
  1. social_project

    social_project Новичок

    С нами с:
    15 апр 2016
    Сообщения:
    11
    Симпатии:
    0
    Приветствую. Помогите пожалуйста с 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 или как обойти данную ошибку?


    Код (Text):
    1. (SELECT scp.`shop_cat_page_id` , COUNT(*) as count FROM `shop_catalog_page` AS `scp`
    2.    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 (
    3.    CASE
    4.    
    5.      WHEN shop_catalog_page_properties_parentid='748' THEN (  shop_catalog_page_properties_types_value_int='2954'  )
    6.      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'  )
    7.  
    8.    ELSE NULL
    9.    END
    10.   )
    11.   WHERE  shop_cat_page_product_type="629"
    12.    
    13.    GROUP BY shop_cat_page_id
    14.    HAVING count > 1
    15.   )