#mysql #sql
Вопрос:
У меня есть этот sql-запрос, как сделать так, чтобы последний И оператор And um_languages.meta_value LIKE %s
использовался только в том случае, если um_languages.meta_value
они не пусты. Спасибо
SELECT
u.ID
FROM
wp_users u
INNER JOIN wp_usermeta um_key_practice ON um_key_practice.user_id = u.id AND um_key_practice.meta_key = 'key_practice'
INNER JOIN wp_usermeta um_languages ON um_languages.user_id = u.id AND um_languages.meta_key = 'languages'
INNER JOIN wp_usermeta um_profile_type ON um_profile_type.user_id = u.id AND um_profile_type.meta_key = 'lawyer_profile_type'
INNER JOIN wp_usermeta um_searchable ON um_searchable.user_id = u.id AND um_searchable.meta_key = 'lawyer_is_searchable'
WHERE
um_profile_type.meta_value = 'extended' AND
um_searchable.meta_value = '1' AND
(
um_key_practice.meta_value = %s
OR
um_key_practice.meta_value = %s
) AND
um_languages.meta_value LIKE %s AND
Комментарии:
1. что значит пустой? пустая строка? ноль? тоже?
2. Пусто, как будто его значение равно нулю
3.
(um_languages.meta_value is null or um_languages.meta_value like %s)
4. NULL amp; ПУСТОЙ может быть не тем же самым, я бы предпочел перефразировать предложение как; … значение um_languages.meta_value НЕ РАВНО НУЛЮ, И значение um_languages.meta_value > «И значение um_languages.meta_value, НАПРИМЕР «%s»
Ответ №1:
если ваш столбец уже равен нулю , оператор like проигнорирует значения null и не вернет эту строку. также вам нужно передать %s как строку
...
AND um_languages.meta_value LIKE '%s'
но если вы хотите вернуть нулевые значения:
...
AND ( um_languages.meta_value LIKE '%s' or um_languages.meta_value is null)