2011-08-22 69 views
0

列中的數據以此格式存儲。我JSON格式存儲數據列如何從列中使用mysql查詢提取所有字段

{"item": { 
    "actor":{ 
     "time":"2011-08-21 21:56:37", 
     "ip":"127.0.0.1", 
     "id":"2010072123522251", 
     "email":"[email protected]", 
     "session_id":"c05e3e61a19650b4ca12a21c2e34df5f", 
     "loggedout":""}, 
    "action":{ 
     "name":"publish", 
     "text":"a_id=11714" , 
"a_id":"11714" 
    } 
}} 

現在我想這樣

時間IP ID電子郵件的結果SESSION_ID

2011-08-21 21點56分37秒127.0.0.1 2010072123522251 2010072123522251 2010072123522251

我用這樣的查詢

SUBSTRING(msg,LOCATE('a_id',msg)+5,(LOCATE('"',msg)+2)) AS answer_id 

但它並沒有給我帶來好的結果。一些結果被終止。請建議

+2

你存儲你的數據的方式是一個糟糕的一個,考慮重新設計數據庫結構,否則你會碰到噸的錯誤和選擇的將是一個痛苦。對不起,沒有發佈任何答案,但我不認爲任何人都可以對你的問題作出一般性回答。 –

+2

如果你喜歡存儲這樣的對象,可以考慮像Mongo或Cassandra這樣的NoSQL選項。 –

+1

基本上它是一個日誌輸出,我把它作爲一個JSON文件在數據庫中轉儲。這是一個糟糕的設計,但我只需要一個一般的建議。如果可能的話,不是確切的答案。我可以很容易地使用python或perl文本處理,但我想知道如果我可以使用mysql – shobhit

回答

0

我做了它使用Python文本處理。因爲通過Sql沒有好的方法。

+0

這是一個明顯的答案,不是嗎?所以,你問的問題你已經有了答案 – ajreal

+0

不,它不是。它是一個替代品。我從來沒有得到答案在mysql – shobhit

+0

哈哈,你存儲爲json,因爲應用json編碼到輸入,不會很明顯,你使用json解碼來提取輸出? – ajreal

1

我沒有對你的答案,但我想到我想到我可能會分享一些想法。首先,雖然我不會推薦它,但您可能可以使用許多JSON解析庫之一編寫Java存儲過程來解析日誌條目。我不認爲MySQL支持這個,但是許多其他的DBMS產品(例如Postgres和Oracle)都可以。其中一個缺點是你總是需要進行全表掃描,並且日誌會變得非常大。

既然你已經知道如何使用Python解析它,你可能會考慮做這樣的事情:

  1. 解析JSON成其組成元素使用python
  2. 插入這些元素到數據庫中(正常標準化的課程)存儲爲文本BLOB參考

現在你可以做合理的查詢,如原單JSON沿着「讓我登錄該日期範圍,其中男主角電子郵件是[email protected]項」和能夠承擔索引的優勢等等。沒有太多理由保留原始的JSON,但您可能只是對格式意外更改的某一天感到高興,並且您發現沒有任何解析工作。

菲爾

相關問題