mysql IF остальное заявление - PullRequest
8 голосов
/ 15 ноября 2010

Не уверен, насколько далеко может зайти SQL-запрос с операторами if / else.

У меня есть простой оператор SELECT:

SELECT amount, transtype ОТ transactions

Столбец transtype собираетсябыть числом.

Например, 1 = продажа, 2 = возврат, 3 = ошибка, 4 = отменено, 5 = что-то еще .... и т. д.

Итак,ничего сложного.Но список имеет тенденцию расти по причинам отчетности.Что хорошо.

Для конкретного запроса, над которым я работаю, есть ли способ извлечь этот столбец как одно из двух или трех указанных чисел или текста?

Например, какой-нибудь transstypeчисла - это «потеря», в то время как другие - «выигрыш», и, возможно, другие «нейтральны».

Я бы хотел извлечь этот столбец только с этими 3, без использования php внутри html-таблицы, в которую я добавляю строки.

Если мое объяснение не понятно, мои извинения.Было трудно выплюнуть.

Ответы [ 4 ]

4 голосов
/ 15 ноября 2010

Используйте функцию MySQL CASE () для фиксированного числа аргументов.Если список становится большим, вы должны использовать вторую таблицу и присоединиться к ним.

Пример:

SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
2 голосов
/ 15 ноября 2010

Попробуйте соединиться с другой таблицей, которая содержит типы транзакций. Что-то вроде:

TRANSACTION_TYPES
transtype | number
label     | varchar(32)

Затем измените ваш запрос, включив объединение:

select t.amount, t.transtype, l.label 
    from transactions.t 
    join transaction_types l on t.transtype = l.transtype;
0 голосов
/ 15 ноября 2010

Вероятно, вы должны использовать ENUM type для этого столбца. Он ограничен 64 значениями, однако, если вам нужно больше, вы должны создать новую таблицу и JOIN в запросе.

0 голосов
/ 15 ноября 2010

Функция ELT должна помочь:

SELECT ELT(`transtype`, 'loss', 'loss', 'gain', 'neutral', …) FROM …

Хотя это не очень элегантно, и логически я бы сделал это в логике представления, а не в логике базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...