0
votes

Mysql json_set () pour travailler avec des tableaux vides

J'ai une table comme ceci: xxx pré>

Je veux ajouter un nouveau paramètre à une ligne, j'ai donc essayé JSON_SET : P>

SELECT *, JSON_SET(settings, '$.newFoo', 10) FROM test;


1 commentaires

Avez-vous essayé d'utiliser la notation de tableau vide pour JSON? ('3', '{}');


4 Réponses :


0
votes

Vous pouvez utiliser case .. Lorsque Opérateur conditionnel pour gérer cela en une seule requête. De plus, depuis votre type de données pour Paramètres IS JSON , vous aurez besoin de CAST () IT TO String (Char) en premier pour vérifier [] : xxx


La requête est la suivante: xxx


1 commentaires

En fait, je veux faire une mise à jour non pas un SELECT, le SELECT était simplement de montrer le résultat



1
votes

La raison pour laquelle votre appel à JSON_SET ne se comporte pas, car vous vous attendez à ce que la syntaxe que vous devez utiliser avec les matrices JSON diffère de ce que vous devez travailler avec un JSON individuel. Considérez la requête suivante, qui ajoute un JSON à un tableau vide: xxx

Ceci imprime: xxx

Démo

donc le JSON_SET La fonction semble avoir deux comportements. Lorsque vous utilisez le JSON approprié, il peut insérer de nouvelles clés ou des nouvelles clés de mise à jour existantes. Lorsque vous utilisez des tableaux, il peut insérer / mettre à jour des éléments du tableau, ce qui pourrait être des objets JSON entiers.


0 commentaires

0
votes

J'ai résolu en stockant toujours les valeurs comme des objets au lieu de tableaux, dans PHP, vous devez ajouter un drapeau à la fonction JSON_ENCODE CODE>:

SELECT *, JSON_SET(COALESCE(settings, '{}'), '$.newFoo', 10) FROM test;


0 commentaires

1
votes

Cela m'accroche aussi aussi pendant un certain temps, mais essayez d'utiliser JSON_ARRAY () au lieu de la notation double support '[]'. Par exemple: xxx


0 commentaires