2011-01-14 10 views
1
SELECT * 
FROM `SC_products` 
WHERE `productID` 
IN (
    (
     SELECT `productID` 
     FROM `SC_product_options_set` 
     LEFT JOIN `SC_products_opt_val_variants` ON `SC_product_options_set`.`variantID` = `SC_products_opt_val_variants`.`variantID` 
     WHERE `SC_products_opt_val_variants`.`optionID` = '14' 
     GROUP BY `SC_product_options_set`.`productID` 
     ORDER BY `SC_products_opt_val_variants`.`sort_order` ASC 
    ) 
    UNION ALL 
    (
     SELECT `productID` 
     FROM `SC_product_options_values` 
     WHERE `SC_product_options_values`.`optionID` = '14' 
     ORDER BY `SC_product_options_values`.`option_value_ru` ASC 
    ) 
) 
GROUP BY `SC_products`.`productID` 
LIMIT 0 , 30 

오류 №1064 - SQL 구문에 오류가 있습니다. 근처에서 사용 할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 라인에서 7MySQL - SQL 구문 오류 (WHERE IN UNION)

, 도움이됩니다.

답변

1

이 시도 :

SELECT * 
FROM `sc_products` 
WHERE `productid` IN (
        SELECT `productid` 
         FROM `sc_product_options_set` 
           LEFT JOIN `sc_products_opt_val_variants` 
           ON `sc_product_options_set`.`variantid` = 
            `sc_products_opt_val_variants`.`variantid` 
         WHERE `sc_products_opt_val_variants`.`optionid` = '14' 
         GROUP BY `sc_product_options_set`.`productid` 
         UNION ALL 
         SELECT `productid` 
         FROM `sc_product_options_values` 
         WHERE `sc_product_options_values`.`optionid` = '14' 
              ) 
GROUP BY `sc_products`.`productid` 
LIMIT 0, 30 

P.S을 : 그것은 IN 절에서

+0

고마워요, 사이버 네이트. 나는 시도 할 것이다. – lysenkobv

+0

Cybernate, 존경 해. 실제로 작동한다! – lysenkobv

0

IIRC, 당신은 넣어 제발 'UNION ALL을 (`SC_produ가 WHERE SC_product_options_values FROM productID 선택' ORDER 절을 함께 사용하여 UNION을 수행해야합니다. 그렇게 할 경우 UNION이 적용될 각 쿼리에서 해당 열을 선택해야합니다.

그런 다음 다른 SELECT 레이어에 해당 결과를 래핑하여 IN 비교가 이루어 지도록해야합니다.

+0

감사하다 becuase 당신은 내가 시도 할 것이다, 당신의 하위 쿼리에 의해 주문을 필요가 없습니다. – lysenkobv

+0

나는 (GROUP와 UNION의 ORDER없이)이 시도 : SC_products' '* FROM 을 선택 WHERE'productID' IN ( ( SC_product_options_set''로부터'productID' 을 선택 좌 SC_product_options_set 'ON'SC_products_opt_val_variants' 가입 ''.'variantID' = SC_products_opt_val_variants'.'variantID' WHERE SC_products_opt_val_variants'.'optionID' '='14 ' ) UNION ALL ( SC_product_options_values' SC_product_options_values'.''''FROM productID' 를 선택 optionID' = '14' ) ) GROUP BY'SC_products'.productID' LIMIT 0, 30 그러나 여전히 같은 줄에 문제가 있습니다. – lysenkobv

+0

이러한 종류의 디버깅을 시도 할 때 일반적으로하는 일은 내 안쪽 구문과 구성이 올바른지 확인하기 위해 독립적으로 쿼리합니다. 각 구성 요소가 확실 해지면 함께 배치 할 때 발생하는 문제는 해결하기가 훨씬 쉽습니다. @Cybernate가 여기에서 다뤘던 것처럼 보입니다. 그러나 앞으로 이와 같은 문제가 발생할 경우를 대비하여이 디버깅 기법을 사용하면 향후에 약간의 고통을 덜 수 있습니다. =) –