Ich versuche ein Notes/Kommentare System für einen Admin Bereich mit der neuen MySQL JSON Unterstützung zu erstellen. Kommentare müssen editierbar sein und ich wollte in Zukunft Unterstützung für andere Dinge hinzufügen, vielleicht Dateianhänge (würde den Dateipfad in JSON speichern, nur nicht die Datei selbst!).MySQL 5.7.8 JSON merge neue Daten
{
"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"
}
]
}
]
}
Ich dachte, es wäre eine Möglichkeit, neue Daten zu fusionieren ähnlich zu sein(), um array_merge ohne jedes Mal einen bestimmten Schlüssel zum Ziel zu benötigen.
Diese Abfrage funktioniert, aber es zielt nur auf eine Sache, den Textinhalt des Kommentars. Wenn ich Tags, Bild- oder Dateianhänge usw. hinzufügen/bearbeiten möchte, brauche ich eine sehr lange Abfrage oder mehrere Abfragen.
UPDATE shared_notes SET json = JSON_REPLACE(json, "$.comments[1].comment", "This is a test comment") WHERE note_id = :note_id
Ich versuchte JSON_REPLACE und JSON_SET Funktionen mit JSON_OBJECT verwenden, aber es überschreibt alle Schlüssel, die nicht angegeben sind, was bedeutet, user_id, Datecreated und alle Unter Kommentare überschrieben.
UPDATE shared_notes SET json = JSON_REPLACE(json, "$.comments[1]", JSON_OBJECT("comment", "This is a test comment")) WHERE note_id = :note_id
Diese franken einer fast Werke Abfrage aber es verkettet tatsächlich die aktualisierte Kommentar auf das Ende des alten:
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
So gibt es eine bessere Art und Weise leicht zu/dynamisch die JSON aktualisieren mit MySQL oder zielt auf $.comments[1].comment
, $.comments[1][0].user_id
etc. der einzige Weg?
Oh Mann, ich kann deinen Schmerz fühlen. Ich kann nicht verstehen, dass solche Funktionen nicht Teil der bereitgestellten JSON-Funktionen sind. Es ist so ein Grundbedürfnis! – EscapeNetscape