使用mySql查询更新字符串JSON

使用mySql查询更新字符串JSON,mysql,json,Mysql,Json,我有一个mySql版本5.7.14字段 id shop_name json_string 1 shop_1 [{"your_number": "2", "player_id": "6789" }, {"your_number": "3", "player_id": "9877" }, {"your_number": "4", "player_id": "132456" }] 2 shop_2 [{"your_number": "2", "player

我有一个mySql版本5.7.14字段

id  shop_name   json_string

 1   shop_1     [{"your_number": "2", "player_id": "6789" }, {"your_number": "3", "player_id": "9877" }, {"your_number": "4",   "player_id": "132456" }]  

 2   shop_2     [{"your_number": "2", "player_id": "6789" }, {"your_number": "3", "player_id": "9877" }, {"your_number": "4",   "player_id": "132456" }]  
如何根据id和JSON更新字符串您的_编号

例如,我想删除id=2的\u number=3字符串

结果:

id  shop_name   json_string
 2   shop_2     [{"your_number": "2", "player_id": "6789" }, {"your_number": "4",   "player_id": "132456" }]  

谢谢

我对此进行了测试,它可以正常工作:

UPDATE Shops
SET json_string = JSON_REMOVE(
  json_string, 
  SUBSTRING_INDEX(
    JSON_UNQUOTE(JSON_SEARCH(json_string, 'one', '3', null, '$[*].your_number')), '.', 1)
)
WHERE id = 2;
我必须指出,这并不意味着JSON对于您的应用程序来说是个好主意

如果您需要操作JSON文档,那么将数据库存储为一组规范化的表会更容易

CREATE TABLE Shops (
  id INT PRIMARY KEY,
  shop_name VARCHAR(10)
);

CREATE TABLE ShopPlayers (
  shop_id INT NOT NULL,
  your_number INT NOT NULL,
  player_id INT NOT NULL,
  PRIMARY KEY (shop_id, your_number)
);
现在,您可以使用更简单的SQL删除播放机:

DELETE FROM ShopPlayers WHERE shop_id = 2 AND your_number = 3;

我已经关注了一段时间关于mysql和json堆栈溢出的问题,我必须说,在我所看到的几乎所有情况下,如果按照规范化规则以传统方式设计表会更好。SQL查询将更易于编写和调试,运行速度更快,数据库将更高效地存储数据。

基于id和JSON更新字符串是什么意思?你的mysql版本是什么?与你的代码完美配合!为什么不在这种模式下工作呢?如果将JSON设计为传统的、规范化的数据库,那么将JSON用于更简单、更高效的情况不是一个好主意。首先,您可以编写简单的任务,如删除一个播放器,而无需发布到堆栈溢出来询问解决方案。起初,我创建了一个单独的表,就像您的示例一样,但我想体验JSON模式的方法。到目前为止,您的体验如何?非常感谢您的帮助!现在,我正在使用经典的规范化数据库,并通过jQuery/Ajax方法创建JSON文件。