J'ai une table comme ceci: Je veux ajouter un nouveau paramètre à une ligne, j'ai donc essayé JSON_SET : P> SELECT *, JSON_SET(settings, '$.newFoo', 10) FROM test;
4 Réponses :
Vous pouvez utiliser case .. Lorsque CODE> Opérateur conditionnel pour gérer cela en une seule requête. De plus, depuis votre type de données pour
Paramètres code> IS code> JSON code>, vous aurez besoin de
CAST () CODE> IT TO String (Char) en premier pour vérifier
[] code>:
La requête code> est la suivante: p>
En fait, je veux faire une mise à jour non pas un SELECT, le SELECT était simplement de montrer le résultat
La raison pour laquelle votre appel à Ceci imprime: p> donc le JSON_SET code> 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:
Démo H2>
P> JSON_SET code > 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. P> P>
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;
Cela m'accroche aussi aussi pendant un certain temps, mais essayez d'utiliser JSON_ARRAY () au lieu de la notation double support '[]'. Par exemple:
Avez-vous essayé d'utiliser la notation de tableau vide pour JSON?
('3', '{}'); code>