2013-03-01 4 views
21

Я этот вопрос:Если еще на ИНЕКЕ

SELECT `id` , `naam` 
FROM `klanten` 
WHERE (
`email` LIKE '%@domain.nl%' 
OR `email2` LIKE '%@domain.nl%' 
) 

Но я хочу сделать что-то вроде этого:

SELECT `id` , `naam` 
FROM `klanten` 
WHERE IF(`email` > 0, 
`email` LIKE '%@domain.nl%' 
, `email2` LIKE '%@domain.nl%' 
) 

Как проверить, если адрес электронной почты существует? Я хочу использовать электронную почту, и если это поле пусто, я хочу использовать email2. Как это сделать?

ответ

39

IF используется для выбора поля, то условие LIKE помещается после него:

SELECT `id` , `naam` 
FROM `klanten` 
WHERE IF(`email` != '', `email`, `email2`) LIKE '%@domain.nl%' 
+0

На второй удар мне нравится ваш ответ лучший – botenvouwer

+0

Рад, что я мог помочь :) –

+0

Могу ли я использовать IF для фильтрации больше полей? Я хочу сделать 'if (active = 1) AND startDate

6

Вы хотите использовать coalesce():

where coalesce(email, email2) like '%[email protected]%' 

Если вы хотите обрабатывать пустые строки ('') по сравнению с NULL, случай работы:

where (case when email is NULL or email = '' then email2 else email end) like '%[email protected]%' 

И, если вы беспокоитесь о том, что на самом деле это просто пробелы:

where (case when email is NULL or ltrim(email) = '' then email2 else email end) like '%[email protected]%' 

В отставке в заявлении if действительно говорится: «Если письмо начинается с числа больше 0». Это потому, что сравнение - 0, число. MySQL неявно пытается преобразовать строку в число. Таким образом, «[email protected]» потерпит неудачу, потому что строка будет преобразовываться как 0. Как и «[email protected]». Но «[email protected]» и «[email protected]» преуспеют.

+0

Будет ли это работать, если электронная почта ' ''' вместо 'NULL'? – mtahmed

+0

@mtahmed Нет, не будет - я это заметил в своем ответе. Вопрос не в том, какова будет правильная проверка. –

+0

@mtahmed no, 'COALESCE' будет работать только на' NULL'. Но столбцы: электронная почта, адрес электронной почты2 имеют нулевое значение? –

2

Обратите внимание, что следующее решение функционально отличается от ответа Гордона Линоффа. Его ответ предполагает, что вы хотите использовать email2, если email NULL. Mine предполагает, что вы хотите использовать email2, если email - пустая строка. Правильный ответ будет зависеть от вашей базы данных (или вы можете выполнить NULL-проверку и проверку пустой строки - все зависит от того, что подходит для вашего проекта базы данных).

SELECT `id` , `naam` 
FROM `klanten` 
WHERE `email` LIKE '%[email protected]%' 
OR (LENGTH(email) = 0 AND `email2` LIKE '%[email protected]%') 
+0

На самом деле, работает 'email IS ''' вместо 'LENGTH (email) = 0'? – mtahmed

+0

это работает для меня спасибо за ответ. Обратите внимание, что я ищу домен, а не сам адрес электронной почты. Вот почему я использую LIKE %%. – botenvouwer

+0

@mtahmed Да, это действительно работает. Я просто копировал вопрос как можно ближе, так что мой ответ был бы более понятен автору (хотя это было бы «email =« верно ») –

1

попробовать это, надеюсь, что это помогает

select user_display_image as user_image, 
user_display_name as user_name, 
invitee_phone, 
(
CASE 
    WHEN invitee_status=1 THEN "attending" 
    WHEN invitee_status=2 THEN "unsure" 
    WHEN invitee_status=3 THEN "declined" 
    WHEN invitee_status=0 THEN "notreviwed" END 
) AS invitee_status 
FROM your_tbl 
Смежные вопросы