Страницы

Поиск по вопросам

вторник, 18 февраля 2020 г.

Замена значения по словарю при SELECT

#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... Пример тут

Комментариев нет:

Отправить комментарий