2011-01-14 32 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サーバのバージョンに対応するマニュアルをチェック「ALL UNIONを( `SC_produ SC_product_options_values FROM productIDをSELECT」ライン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

ありがとう、Cyber​​nate。試してみます。 – lysenkobv

+0

Cyber​​nate、あなたを尊敬します。それは実際に動作します! – lysenkobv

0

IIRCのは、あなたが配置する必要がありますあなたが結合しているクエリの外でORDER句を使用する必要があります。そうした場合は、各UNIONされたクエリの列を選択して、あなたの完全なレコードセット。その後

は、あなたのIN比較は動作しますので、別のSELECTの層にそれらの結果をラップする必要があります。

+0

おかげでbecuaseあなたは私がしようと、あなたのサブクエリでORDER BYを必要としません。 – lysenkobv

+0

私は(GROUPなしとUNIONでのORDER)、これを試してください: 'SC_products' WHERE' productID' IN( ( * FROM を選択SC_product_options_set' LEFT 'FROM productID' は' SC_product_options_set ON 'SC_products_opt_val_variants'のJOIN' SELECT '.'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' )私は通常、同じ行に問題があります – lysenkobv

+0

私が通常これらの種類のデバッグをしようとしているときに私がしているのは、私の内部をそれぞれ実行することです。それらの構文と構成が正しいことを確認するために独立してクエリを実行します。いったん私が各コンポーネントを確認したら、それらをまとめるときに問題があれば解決するのがはるかに簡単です。 @Cyber​​nateはここで取り上げたようですが、将来このような問題に遭遇した場合でも、このデバッグ手法は将来の苦痛を軽減します。 =) –