Пытался гуглить, но так и не смог ничего найти.
Вообщем есть таблица 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.
Два варианта:
JOIN
с этой таблицейSELECT CASE...
Пример тут
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня возникает ошибка Undefined variable: usersЯ заранее извиняюсь, вопрос конечно элементарный
Для множественного обновления нескольких строк до этого использовал один запрос и выражение CASE в немКак правило это усложняет написание...
Я новичок в PHP, не могу понять как использовать одинарные кавычки дважды (в echo и коде)