#php #mysql #sql
Пытался гуглить, но так и не смог ничего найти.
Вообщем есть таблица 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?
Ответы
Ответ 1
Можно сделать через 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.Ответ 2
Два варианта: Если "словарь" большой, занести его в отдельную таблицу и результат получать как JOIN с этой таблицей Если "словарь" в 5-10 строк, можно использовать SELECT CASE... Пример тут
Комментариев нет:
Отправить комментарий