SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.10.2012 14:53:40

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

Помогите сократить запись в IF

Всем привет!
Не подскажите, как сократить такую запись, чтобы избежать дублирования?


SELECT
IF(TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)) <> '', TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)), `fullname`) AS `name`
.....
 

Отредактированно tazododu (06.10.2012 14:57:04)

Неактивен

 

#2 12.10.2012 13:25:40

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Помогите сократить запись в IF

Можно так

SELECT
IF(@a:=TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)) <> '',@a, `fullname`) AS `name`


можно так
SELECT
IF((`users`.`name` OR `users`.`lastname`), TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)), `fullname`) AS `name`

Неактивен

 

#3 12.10.2012 13:35:12

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

Re: Помогите сократить запись в IF

evgeny написал:

Можно так

SELECT
IF(@a:=TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)) <> '',@a, `fullname`) AS `name`

Ого! Я и не знал про пользовательские переменные! Передо мной открыты теперь огромные возможностиsmile
Спасибо!

Неактивен

 

#4 12.10.2012 15:20:54

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сократить запись в IF

evgeny написал:

Можно так

SELECT
IF(@a:=TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)) <> '',@a, `fullname`) AS `name`

Так нельзя. В данном случае переменная @a будет равна результату сравнения TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)) и '', т.е. будет принимать значение 0 или 1.
Нужно сначала провести присвоение переменной, а потом сравнение, т.е.

SELECT
IF((@a:=TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`))) <> '',@a, `fullname`) AS `name`

Неактивен

 

#5 12.10.2012 15:27:41

tazododu
Завсегдатай
Зарегистрирован: 24.09.2010
Сообщений: 51

Re: Помогите сократить запись в IF

vasya написал:

evgeny написал:

Можно так

SELECT
IF(@a:=TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)) <> '',@a, `fullname`) AS `name`

Так нельзя. В данном случае переменная @a будет равна результату сравнения TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`)) и '', т.е. будет принимать значение 0 или 1.
Нужно сначала провести присвоение переменной, а потом сравнение, т.е.

SELECT
IF((@a:=TRIM(CONCAT(`users`.`name`, ' ', `users`.`lastname`))) <> '',@a, `fullname`) AS `name`

Спасибо за замечание!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson