2014-01-07 3 views
0

Я хочу запросить тяжести/объект из системного журнала и перевести затем от числа к значимым ключевым словам, как это:Как создать ключевое слово> отображение значений в MySQL?

select case severity 
when 0 then 'emerg' 
when 1 then 'Alert' 
when 2 then 'Crit' 
when 3 then 'Error' 
when 4 then 'Warn' 
when 5 then 'Notice' 
when 6 then 'Info' 
when 7 then 'Debug' 
end, 

case facility 
when 0 then 'kern' 
when 1 then 'user' 
... 
when 23 then 'local7' 
end 
from logs.sys_log; 

Хотя диапазон тяжести от 0 до 7, а диапазон установки от 0 до 23. Я получу очень длинную строку запроса. Есть ли какой-либо более умный метод для создания map-> value mapping в MySQL, чтобы сократить строку запроса?

+0

Что еще говорит [Мой] SQL с строкой запроса? Информация в базе данных и представление запроса в ресурсе URI - это два разных понятия - хотя сопоставление 1: 1 обычно упрощает порядок вещей. Единственная проблема заключается в том, чтобы убедиться, что ключи, которые являются стабильными в течение времени жизни URI, так что нет случайных кросс-запросов. – user2864740

ответ

3

Создание новых таблиц severity_mapping и с двумя колонками:

  • номер
  • значение

и сохранить данные 0-emerg и т.д. для первой таблицы и 0-kern ко второму. Позже, используйте предложения JOIN в вашем запросе.

+0

Будет ли более эффективным использование функции severity_to_str (key) для реализации сопоставлений? – Brightshine

+0

@Brightshine Я не знаком с функцией 'severity_to_str'. Ссылка на его документацию? – hjpotter92

+0

В моем первоначальном дизайне написана пользовательская функция: string severity_to_str (int). severity_to_str (0) вернет «всплытие», а severity_to_str (1) вернет «Alert» ... – Brightshine

Смежные вопросы