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

237
18 мая 2017, 13:00

Пытался гуглить, но так и не смог ничего найти.

Вообщем есть таблица 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?

Answer 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.

Answer 2

Два варианта:

  • Если "словарь" большой, занести его в отдельную таблицу и результат получать как JOIN с этой таблицей
  • Если "словарь" в 5-10 строк, можно использовать SELECT CASE...

Пример тут

READ ALSO
Как передать массив во view

Как передать массив во view

У меня возникает ошибка Undefined variable: usersЯ заранее извиняюсь, вопрос конечно элементарный

160
Стоит ли использовать multi query для mysqli

Стоит ли использовать multi query для mysqli

Для множественного обновления нескольких строк до этого использовал один запрос и выражение CASE в немКак правило это усложняет написание...

197
Одинарные кавычки в echo php

Одинарные кавычки в echo php

Я новичок в PHP, не могу понять как использовать одинарные кавычки дважды (в echo и коде)

213
Как узнать категорию на tag.php?

Как узнать категорию на tag.php?

Подскажите, как узнать категорию, находясь в шаблоне tagphp ?

168