Я пытаюсь создать систему примечаний/комментариев для области администратора с новой поддержкой MySQL JSON. Комментарии должны быть доступны для редактирования, и я хотел бы добавить поддержку для других вещей в будущем, возможно, вложения файлов (будет хранить путь к файлу в JSON, а не только сам файл!).MySQL 5.7.8 JSON объединяет новые данные
{
"comments": [
{
"comment": "This is a comment",
"user_id": 5,
"datecreated": "2016-03-19"
},
{
"comment": "This is a comment",
"user_id": 1,
"datecreated": "2016-03-19"
"comments": [
{
"comment": "This is a sub-comment",
"user_id": 4,
"datecreated": "2016-03-19"
},
{
"comment": "This is a sub-comment",
"user_id": 4,
"datecreated": "2016-03-19"
}
]
}
]
}
Я думал, что будет способ объединить в новых данных, подобных array_merge() без необходимости целевого конкретного ключа каждый раз.
Этот запрос работает, но он нацелен только на одно, текстовое содержимое комментария. Если бы я хотел добавить/редактировать теги, вложения изображений или файлов и т. Д., То мне понадобится очень длинный запрос или несколько запросов.
UPDATE shared_notes SET json = JSON_REPLACE(json, "$.comments[1].comment", "This is a test comment") WHERE note_id = :note_id
Я попытался с помощью функции JSON_REPLACE и JSON_SET с JSON_OBJECT но перезаписывает все ключи, которые не указаны, что означает user_id, datecreated и любые комментарии к югу перезаписаны.
UPDATE shared_notes SET json = JSON_REPLACE(json, "$.comments[1]", JSON_OBJECT("comment", "This is a test comment")) WHERE note_id = :note_id
Это Франкенштейна из запроса почти работает, но он на самом деле сцепляет обновленный комментарий на конец старого:
UPDATE shared_notes SET json = JSON_SET(json, "$.comments[1]", JSON_MERGE(JSON_EXTRACT(json, "$.comments[1]"), CAST('{"comment":"Test"}' AS JSON))) WHERE note_id = :note_id
Так есть лучший способ легко/динамически обновлять JSON с помощью MySQL или нацеливается на $.comments[1].comment
, $.comments[1][0].user_id
и т. Д. Единственный способ?
О человек, я просто чувствую вашу боль. Я не могу понять, как такие функции не являются частью предоставленных json-функций. Это такая основная потребность! – EscapeNetscape