2015-06-02 3 views
0

Im пытается выяснить, как добавить нуль к определенному значению JSON-декодированного массива для нескольких записей, хранящихся в таблице MySQL, в соответствии с некоторыми условиями.Добавить значение в параметр массива декодирования JSON, хранящийся в MySQL

например, для таблицы «меню», столбец «PARAMS» (текст) есть записи, содержащие JSON декодируются массивы этого формата:

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

и столбец «Идентификатор» имеет числовое значение 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, его хорошая идея, но в настоящее время я не могу, работа, которую я делаю, является ее частью Joomla CMS, которая использует MySQL ... – 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-запрос, который будет искать и найдите «категории»: [«999»] в массиве JSON и добавьте нуль в конец номера, обновив запись ... надеюсь, что ее более ясно – buzibuzi

+0

SQL-запрос позволит вам вставлять и извлекать данные из вашей базы данных. Это не позволит вам манипулировать данными. Для этого вам нужно использовать определенную пользователем функцию или серверный код, например PHP. если вы сохраняете строки JSON в своей базе данных, возможно, лучшим вариантом будет база данных NoSQL. Можете ли вы объяснить общую картину, чтобы мы могли понять, какую проблему вы решаете? –

+0

Hi @James Newton, большая картинка такова: у меня есть записи, в которых есть данные, закодированные JSON, все, что я хочу сделать, это их обновление, так что после этого значение «categories» имеет еще один нуль. я бы подумал, что вы можете выделить это значение в строке JSON, используя REGEX, и изменить его с помощью MySQL UPDATE. слишком сложно ? – buzibuzi