2017-02-21 61 views
0

在我們的系統,我們有11項標準(編號1..11)創建基於JSON的2場

我們有一個表在MySQL 5.6的視圖,在該表中沒有包含JSON對象文本列:

標準柱例如:

[ 
    { 
    "important": false, 
    "paramsJson": { 
     "items": [ 
     { 
      "text": "asd" 
     }, 
     { 
      "text": "fasf" 
     }, 
     ] 
    }, 
    "criteria": 1 
    }, 
    { 
    "important": true, 
    "paramsJson": { 
     "A": "X", 
     "B": "Y", 
     "C": 2 
    }, 
    "criteria": 11 
    }, 
    { 
    "important": false, 
    "paramsJson": { 
     "ASD": true, 
     "WERT": true, 
    }, 
    "criteria": 10 
    } 
] 

格式爲「重要」的屬性,然後再一個「paramsJson」,它可以含有複雜的對象,並在最後的「標準」的ID。 我們可以以任何順序達到所有11項標準。

現在我想創建具有重要的列的視圖爲每個標準 所以我們將有11列important1,...,important11。每列可以爲空/真/假。

在上面的json示例中,條目將具有important1 = false,important10 = false和important11 = true(其餘爲null)。

感謝您的幫助,提供有關如何從條件列中提取重要屬性的建議,並將它附加在隨後的cirteria標識中。

感謝

+0

如果您打算在查詢中使用JSON對象中的數據,那麼您實際上應該將該數據分解爲第一範式中的一組關係表。按照它的方式按照你想要的數據來做將是非常昂貴的。 – JRLambert

+0

也許考慮你MongoDB或任何其他面向文檔的數據庫,而不是使用MySql。根據您的需求選擇合適的工具,您不需要總是使用錘子。 – Galileox86

+0

這對我們很清楚,我們將遷移我們的數據,但這需要時間,因爲這不是優先事項,因爲我們現在需要創建臨時報告。 – Barak

回答

0

你可以嘗試MySQL JSON UDFs,其中包括JSON_EXTRACT()功能,您可以使用從存儲在MySQL你的字符串提取JSON對象和元素。有關安裝UDF的說明,您可能需要閱讀我的blog post。最新版本可以下載here

如果升級到MySQL 5.7,那麼您可以在您的視圖中使用native JSON functions,你也必須添加generated columns到表中,如果你想揭露提取JSON值的選項。

+0

我已閱讀了5.7功能,但恐怕目前升級不是一種選擇。我會嘗試你建議的其他工具。謝謝 – Barak

+0

我在看你的博客,似乎json_extract函數是非常基本的,(我用其他更簡單的情況下使用了定位功能)。你如何看待它與我提出的問題交手? – Barak