2016-11-01 2 views
6

Это мой первый вопрос, задающий здесь вопрос, простите меня, если я сделаю какие-либо ошибки любителя.MYSQL Triggers: JSON_SEARCH целочисленное значение в массиве json целых чисел

Я ищу, чтобы использовать json_search, чтобы получить путь массива, соответствующий значению.

Я попробовал и это работает:

SET @j = '["3", "2", "1"]'; 
SELECT json_search(@j, 'one', '2'); 

возвращает $ [1];

Я попробовал, и это не работает (? Как мне сделать эту работу)

SET @j = '[3, 2, 1]'; 
SELECT json_search(@j, 'one', 2); 

возвращает нуль;

В основном я хочу хранить @j как целочисленный массив вместо строкового массива для целей индексирования. Есть ли способ изменить целочисленный массив в массив строк для сравнения, если нет возможности для json_search работать с целыми числами?

Спасибо заранее!

+0

Похоже, что эта ошибка еще не исправлена: https://bugs.mysql.com/bug.php?id=79316 – RayCh

ответ

0

Я пробовал метод обхода, который должен CONCAT строку и отсылать ее обратно в JSON и обновлять таблицу. Это не самый элегантный способ, поэтому, если у вас есть какие-либо предложения, пожалуйста, дайте мне знать! :)

BEGIN 
DECLARE var1 INT default -2; //offsets 
DECLARE var2 INT default 2; //offsets 
SELECT StatusID into @statusList FROM UserStatusesIndex; 
SET @statusID_to_remove = OLD.StatusID; 
SET @startIndex = INSTR(@statusList, @statusID_to_remove); 
SET @charLength = CHAR_LENGTH(@statusID_to_remove); 

IF @startIndex <= 2 THEN SET var1=-1, var2=2; //If its the first index 
ELSEIF (CHAR_LENGTH(@statusList) - @startIndex <= 2) THEN SET var1=-3, var2=0; //If its the last index 
ELSE SET var1=-2, var2=2; 
END IF; 

SET @newJson=CAST(CONCAT(SUBSTRING(@statusList, 1, @startIndex+var1), SUBSTR(@statusList, @startIndex + @charLength+var2, CHAR_LENGTH(@statusList) - @startIndex - @charLength+2)) as JSON); 
UPDATE UserStatusesIndex SET [email protected] WHERE StatusCreator=OLD.StatusCreator; 
END 

Спасибо!

0

Это похоже на работу:

SET @j = '[3, 2, 1]'; 
SELECT JSON_CONTAINS(@j, '3', '$'); 
1

Это дизайн, хотя я не могу согласиться с командой MYSQL. Это должно быть реализовано.

https://bugs.mysql.com/bug.php?id=79233 [закрытый]

В спецификации на https://dev.mysql.com/worklog/task/?id=7909 говорит: «Эта функция возвращает путь (ов) к данной строке Возвращенного пути (ы) идентификации пользователей объекта или слоты массива, которые являются символом. строки. "

Похоже, что целью этой функции было поиск строк . Документация должна быть обновлена, чтобы уточнить, что функция предназначена для поиска строковых скаляров, а не для скаляров в вообще.

Смежные вопросы