MySQL: если поле пусто, присвойте значение - PullRequest
4 голосов
/ 22 декабря 2010

Вот мой запрос:

$sql = "SELECT u.PHONE , u.STATE , if (uo.CHANNEL='','web',channel) as TYPE FROM user
LEFT JOIN user_oferts uo ON u.PHONE=uo.PHE_USER 
WHERE (u.STATE='active') ";

И это прекрасно работает, я получаю то, что хочу, НО для пустого канала.

Мне нужно, чтобы канал был "веб", если он не "wap", тогда канал не будет пустым, или нулевым, или ничего. Как я могу это сделать? Что я делаю неправильно?

Большое спасибо

Ответы [ 2 ]

5 голосов
/ 22 декабря 2010
select 
...
case when channel = '' then 
   web 
else 
   channel 
end as TYPE....

с использованием оператора CASE .

, т.е. для вашего случая

$sql = "SELECT u.PHONE , u.STATE 
, case when coalesce(uo.CHANNEL, '') = '' then 'web' else channel end as TYPE 
FROM user
LEFT JOIN user_oferts uo ON u.PHONE=uo.PHE_USER 
WHERE (u.STATE='active') ";

Редактировать: добавлено coalesce к сделкес возможными значениями NULL.

3 голосов
/ 22 декабря 2010

Любая причина, почему это не может работать?

$sql = "SELECT u.PHONE , u.STATE , if (uo.CHANNEL='wap','wap','web') as TYPE FROM user
LEFT JOIN user_oferts uo ON u.PHONE=uo.PHE_USER 
WHERE (u.STATE='active') ";

MySQL не любит сравнивать null с string, поэтому вы можете либо вложить в другое if тестирование оператора uo.CHANNEL IS NULL, либо, скорее, изменить свою таблицу, чтобы она не могла быть нулевой, и присвойте ему значение по умолчанию «wap».

...