使用mySql查询更新字符串JSON
我有一个mySql版本5.7.14字段使用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
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文件。