#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... Пример тут
Комментариев нет:
Отправить комментарий