2015-06-02 53 views
0

我試圖解決如何根據某些條件將零附加到存儲在MySQL表中的多個記錄的特定JSON解碼數組值。將值附加到存儲在MySQL中的JSON解碼數組參數

例如,用於表「菜單」,列「PARAMS」(文本)具有包含JSON記錄解碼此格式的數組:

{"categories":["190"],"singleCatOrdering":"","menu-anchor_title":""} 

和列「ID」具有90

數值

我的目標是零添加到「類別」中menu.params值每當(例如)menu.id是下100

該記錄結果是

{"categories":["1900"],"singleCatOrdering":"","menu-anchor_title":""} 

所以即時查找SQL查詢將搜索並查找數據庫中「類別」:[「999」]的出現次數,並通過在值的末尾添加一個零來更新記錄。

answer是部分有用的提供使用mysql-udf-regexp但它指的是替換一個值,而不是更新它。 也許是REGEXP_REPLACE?函數將會訣竅。我從來沒有使用過這個庫,也不熟悉它,也許有更簡單的方法來實現我所需要的?

感謝

+0

切換到MariaDB;它與MySQL兼容,但也具有JSON操作功能。 –

+0

嗨@RickJames,它是一個好主意,但目前我不能,我正在做的工作是它使用MySQL的Joomla CMS的一部分... – buzibuzi

+0

Joomla不應該注意到它的區別。 (不,我沒有_real_證據支持這種說法。) –

回答

0

如果我正確理解你的問題,你想代碼,不會是這樣的:

var data = { 
    "menu": { 
     "id": 90, 
      "params": { 
      "categories": ["190"], 
       "singleCatOrdering": "", 
       "menu-anchor_title": "" 
     } 
    } 
}; 

var keys = Object.keys(data); 
var columns; 
for (var ii = 0, key; key = keys[ii]; ii++) { 
    value = data[key]; 
    if (value.id < 100) { 
     value.params.categories[0] += "0"; 
     alert(value.params.categories[0]); 
    } 
} 

jsFiddle

不過,我沒有使用正則表達式的。也許如果你改寫這個問題,正則表達式的必要性將變得更加清晰。

+0

嗨@詹姆斯,謝謝,但即時通訊尋找一個SQL查詢,將搜索和找到JSON數組中的「類別」:[「999」],並通過更新記錄在數字的末尾添加一個零...希望其更清晰 – buzibuzi

+0

SQL查詢將允許您插入和提取數據從你的數據庫。它不會允許你操縱數據。爲此,您需要使用用戶定義的函數或PHP等服務器端代碼。如果您要將JSON字符串存儲在數據庫中,那麼NoSQL數據庫可能是更好的選擇。你能解釋一下整體情況,以便我們能夠理解你正在努力解決什麼問題嗎? –

+0

嗨@詹姆斯牛頓,大圖是這樣的:我有記錄有這個JSON編碼的數據,我想要做的就是更新它們,以便「類別」值在它之後具有另一個零。我原以爲你可以使用REGEX在JSON字符串中隔離這個值,並使用MySQL UPDATE更改它。太複雜 ? – buzibuzi