Пытался гуглить, но так и не смог ничего найти.
Вообщем есть таблица logs:
id (INTEGER(10)) | action (SET(login, logout, error))
-----------------------------------------------------
1 | login
2 | error
3 | error
4 | logout
При выборке мне нужно преобразовать все значения в action в человекопонятный вид, в соответствии со словарем:
login => 'Авторизация'
logout => 'Выход'
error => 'Ошибка'
т.е. результат должен быть таким:
id | action
------------
1 | Авторизация
2 | Ошибка
3 | Ошибка
4 | Выход
Как подобное можно реализовать средствами MySQL?
Ответ
Можно сделать через case
select id,
case action when 'login' then 'Авторизация'
when 'logout' then 'Выход'
when 'error' then 'Ошибка'
end
from logs
Или использовать join и таблицу значений прямо в запросе:
select L.id, N.name
from logs L
join (
select 'login' as action, 'Авторизация' as name
union all select 'logout','Выход'
union all select 'error','Ошибка'
) N
on L.action=N.action
Но на будущее лучше завести в БД отдельную таблицу - справочник действий, с такой структурой как в выборке N в запросе выше. И выполнять в запросе join с этой таблицей. Это позволит избежать необходимости модификации кода при добавлении новых значений action.
Комментариев нет:
Отправить комментарий