Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL 5.7 :convertir un simple JSON_ARRAY en lignes

Vous pouvez le faire dans MySQL 8.0 avec JSON_TABLE() :

select r.res from mytable, 
 json_table(mytable.content, '$[*]' columns (res int path '$')) r 
where mytable.id = 1

J'ai testé sur MySQL 8.0.17, et voici le résultat :

+------+
| res  |
+------+
|    3 |
|    4 |
+------+

Si vous utilisez une version antérieure à MySQL 8.0, vous disposez des options suivantes :

  • Trouvez une solution SQL incroyablement complexe. C'est presque toujours la mauvaise façon de résoudre le problème, car vous vous retrouvez avec un code dont la maintenance est trop coûteuse.
  • Récupérez le tableau JSON tel quel et décomposez-le dans le code de l'application.
  • Normalisez vos données afin d'avoir une valeur par ligne, au lieu d'utiliser des tableaux JSON.

Je trouve souvent des questions sur Stack Overflow sur l'utilisation de JSON dans MySQL qui me convainquent que cette fonctionnalité a ruiné MySQL. Les développeurs continuent de l'utiliser de manière inappropriée. Ils apprécient le fait que cela facilite l'insertion données semi-structurées, mais ils trouvent que cela rend requête ces données bien trop complexes.