2017-05-13 2 views
0

Ich habe Kanäle Tabelle:MySQL JSON_REMOVE json Array

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

Und brauchen "2" Wert von id 1 zu entfernen, so muss ich diese bekommen:

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

ich mit dieser Abfrage versuchen:

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

aber Wert wird nicht entfernt, wenn i ‚$ [2]‘ verwenden dann Wert entfernt ist, aber ich muss nach Wert nicht Index entfernen ... hat jemand weiß, wie man remo von json Array spezifischen Wert?

+0

Eine Option [14,5 vorbereitete SQL-Anweisung Syntax] zu verwenden ist (https://dev.mysql.com/doc/refman/5.7/en/ sql-syntax-prepared-statements.html). Siehe [db-fiddle] (https://www.db-fiddle.com/f/i9Lcw5BTdTtsjgtPHohAMq/0). – wchiquito

+0

danke es funktioniert ... aber ich benutze obige Lösung, weil es benutzerfreundlicher für mich ist ... aber Ihre Arbeiten wie erwartet – John

Antwort

0

Versuchen:

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

db-fiddle See.

+0

danke..arbeiten wie Charme ... – John

0

Try This

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

für mich arbeiten

+0

Versuchen Sie '\' sort \ '= [" 1 "," 4 "," 3 "," 2 "]'. – wchiquito