2014-01-07 35 views
0

我想查詢從syslog嚴重/設施,並從號碼,然後轉化爲有意義的關鍵詞是這樣的:如何巧妙地在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. 我會得到一個很長的查詢字符串。 是否有更聰明的方法來在MySQL中創建鍵 - >值映射來縮短查詢字符串?

+0

[My] 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)將返回'emerg',並且severity_to_str(1)將返回'Alert'... – Brightshine

相關問題