2016-10-07 18 views
-1

私は私が好きな仕事になって少し問題を抱えているクエリを使用している場合、クエリは次のようになりますと:Where句の条件

SELECT 
    hf.file_path AS image, 
    hop.order_product_name AS product, 
    hop.order_product_price AS unit_flat_price, 
    .... <SHORTENED DOWN QUERY> .... 
    hc.currency_symbol AS currency, 
    ho.order_payment_method AS payment_method, 
    ho.order_created AS created 
FROM 
    shop_order AS ho 
LEFT JOIN 
    shop_order_product AS hop ON ho.order_id = hop.order_id 
LEFT JOIN 
    shop_product AS hp ON hop.product_id = hp.product_id 
LEFT JOIN 
    shop_file AS hf ON(
    IF(
     hp.product_parent_id > 0, 
     hp.product_parent_id, 
     hp.product_id 
    ) 
) = hf.file_ref_id 
LEFT JOIN 
    shop_currency AS hc ON ho.order_currency_id = hc.currency_id 
WHERE 
    ho.order_id = X AND(
    hf.file_ordering = 0 OR hf.file_ordering = NULL 
) 

今私の問題は時々shop_fileテーブルが勝ったということです「Tはshop_file表に試合を持っているし、私は参加している 『無視』するために私のクエリが必要ですが、試合がある場合、私はそれが私が

WHERE 
    ho.order_id = X (
    IF(
     hf.file_path = NULL, 
     '', 
     AND(
     hf.file_ordering = 0 OR hf.file_ordering = NULL 
    ) 
    ) 
) 
を試してみた WHERE句で AND一部を適用する必要があります

で異なる値を試しました行が、何も私はまだ私も

WHERE 
    ho.order_id = X AND(
    hf.file_id = NULL OR(
     hf.file_ordering = 0 OR hf.file_ordering = NULL 
    ) 
) 

を試みたが、それは単に私が私が私の望ましい結果を得る全体 AND(...)一部を削除した場合、空の結果セットを(返す構文エラー #1064 - You have an error in your .... syntax to use near '(IF(

を得た、助けました。

今、私は私が

WHERE 
    ho.order_id = X AND(
    IF EXIST(SELECT file_path FROM ...) 

の線に沿って何かを行うことができます知っているしかし、それは正しい結果を得るために、そのクエリにJOINS他を追加するために私を必要とする(場合に画像がある)とI可能であれば、試しにJOINを追加する必要はありません。WHERE ... AND(IF_EXIST (SELECT

答えて

1

whereステートメントにCASEを追加する必要があります。

AND CASE 
WHEN hf.file_path IS NOT NULL 
THEN hf.file_ordering = 0 OR hf.file_ordering IS NULL END; 
+0

恐れも空の結果セットを返します。

は、あなたのWHERE句にこれを追加することで、これを試してみてください。 – Epodax

+0

あなたは恐れていますか?ファイルがnullでない場合は、追加のconditionがwhereステートメントに追加されます。これはあなたが望むものなので、あなたが恐れていることを理解できませんか?条件が一致しない場合、hfテーブルから空のセットが返されます。単純です。私は最後のコメントを編集しました。そこにはNULL = NULLでなくてはなりません。 – michal

+0

私はあなたの答えのコードを使ってクエリを実行し、空の結果セットを返しました。 "恐れ"はスピーチの方法です。 「それはうまくいかない」と言っている。 - このhttp://ell.stackexchange.com/questions/1195/when-can-you-use-im-afraid-thatのように – Epodax

関連する問題