2017-05-13 8 views
0

私はチャンネルテーブルがあります。私はこのクエリを使用してみてくださいMySQLのJSON_REMOVEのJSON配列

+----+-------------------+---------+ 
| id | sort    | bouquet | 
+----+-------------------+---------+ 
| 1 | ["1","3","4"]  | ["1"] | 
+----+-------------------+---------+ 

+----+-------------------+---------+ 
| id | sort    | bouquet | 
+----+-------------------+---------+ 
| 1 | ["1","2","3","4"] | ["1"] | 
| 2 | ["4"]    | ["4"] | 
+----+-------------------+---------+ 

ので、私はこれを取得する必要があり、ID 1から "2" の値を削除する必要がありますが。 ...私は「$ [2]」その値が削除されて使用している場合

SELECT id, sort, bouquet, JSON_REMOVE(sort, '$."2"') FROM channels WHERE id=1; 

しかし、値が削除されていませんが、私は値ではなく、インデックスで削除する必要がある誰もがREMOする方法を知っているんjson配列の特定の値からですか?

+0

1つのオプション操作この

UPDATE channels SET 'sort' = JSON_REMOVE('sort', '$[1]') WHERE 'id' = 1 

は[14.5準備SQLステートメント構文]を使用することです試してみてくださいsql-syntax-prepared-statements.html)を参照してください。 [db-fiddle](https://www.db-fiddle.com/f/i9Lcw5BTdTtsjgtPHohAMq/0)を参照してください。 – wchiquito

+0

これはうまくいきました...しかし私はより使いやすいので上記のソリューションを使用しています...しかし、あなたの作品は期待どおり – John

答えて

0

試してみてください。

SELECT 
    `id`, 
    `sort`, 
    `bouquet`, 
    JSON_REMOVE(`sort`, 
       JSON_UNQUOTE(
       JSON_SEARCH(`sort`, 'one', 2) 
      )) 
FROM `channels` 
WHERE `id` = 1; 

db-fiddleを参照してください。

+0

ありがとうございました...チャームのように... – John

0

https://dev.mysql.com/doc/refman/5.7/en/(私

+0

'\' sort \ '= [" 1 "、" 4 "、" 3 "、" 2 "] 'とする。 – wchiquito