У меня есть запрос, который я, имеющий небольшие проблемы с получением работы, как я хочу, запрос выглядит следующим образом:Если статья с IF условие
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 выиграл «т есть матч в shop_file
таблицы, а затем мне нужен мой запрос, чтобы„игнорировать“, что присоединиться, но если есть совпадение, то мне нужно применить AND
части в предложении WHERE
я попытался
WHERE
ho.order_id = X (
IF(
hf.file_path = NULL,
'',
AND(
hf.file_ordering = 0 OR hf.file_ordering = NULL
)
)
)
Я пробовал с различными значениями на hf.file_path =
линии, но ничего не помогало, я все еще получил ошибку синтаксиса #1064 - You have an error in your .... syntax to use near '(IF(
Я также попытался
WHERE
ho.order_id = X AND(
hf.file_id = NULL OR(
hf.file_ordering = 0 OR hf.file_ordering = NULL
)
)
Но это просто возвращает пустой результирующий набор (где, если я удалить всю AND(...)
части я получаю нужный мне результат.
Теперь я знаю, что могу сделать что-то вдоль линий
WHERE
ho.order_id = X AND(
IF EXIST(SELECT file_path FROM ...)
Но это потребовало бы мне добавить другой JOINS
в этом запросе, чтобы получить правильный результат (в случае, если есть изображение) и я хотите попытаться избежать необходимости добавлять JOIN в WHERE ... AND(IF_EXIST (SELECT
, если это возможно.
Боится, что также возвращает пустой результирующий набор. – Epodax
вы боитесь, или вы, где это проверить? Если файл не имеет значения null, то дополнительное условие будет добавлено в оператор where. Это то, что вы хотите, чтобы не понимать, чего вы боитесь? Это приведет к возврату пустого набора из таблицы hf, когда условия не совпадут - его просто. Я отредактировал последний комментарий, должен быть IS NULL not = NULL – michal
Я выполнил запрос с кодом в вашем ответе, и он вернул пустой набор результатов, «боится» - это способ речи, это вежливый способ говоря: «Это не работает». - Как это http://ell.stackexchange.com/questions/1195/when-can-you-use-im-afraid-that – Epodax