Extraction de champs Json [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 02-08-2019 à 15:40:34
Pas évident, le JSON n'étant pas un format ou l'ordre des clef/valeur est prédictible, tu ne peux même pas faire un LIKE ('%Intitule%"is_filter":true%') sur une colonne en FULLTEXT, ni même une REGEX (qui serait de toute façon catastrophique en terme de perf)...
Regardes du coté de https://dev.mysql.com/doc/refman/5. [...] on-extract si tu peux trouver ton bonheur.
Marsh Posté le 06-08-2019 à 14:33:52
Après, est-ce une bonne idée de stocker du json en base si on veut en extraire des données ? Pourquoi ne pas avoir créé une table dédiée avec les colonnes "name", "stats", "is_array", ... et éventuellement une colonne "cle" prenant la valeur "Intitule" et "Fin" et ne pas l'avoir remplie avec les données de ce JSON ?
Marsh Posté le 06-08-2019 à 15:34:56
Harkonnen a écrit : Après, est-ce une bonne idée de stocker du json en base si on veut en extraire des données ? Pourquoi ne pas avoir créé une table dédiée avec les colonnes "name", "stats", "is_array", ... et éventuellement une colonne "cle" prenant la valeur "Intitule" et "Fin" et ne pas l'avoir remplie avec les données de ce JSON ? |
Ça peut être utile quand t'es face à des données dont la forme n'est pas forcément prévisible, ou que ces données augmenteraient significativement la complexité de ta base en utilisant l'approche traditionnelle.
Y'a pas mal de cas d'utilisations pour ça.
Marsh Posté le 06-08-2019 à 15:42:06
Reste à savoir si c'est le cas pour Furaxx
Marsh Posté le 17-08-2019 à 08:46:24
à coeur vaillant, rien d'impossible
stoker du json n'est certes pas très ingénieux, mais c'est fait
Code :
|
Voilà comment extraire de "intituler" tous les "stats":true
la table comprend près de 200 000 enreg, pour en extraire les plus 32 000 il faut 1.4 sec, question perfs, c'est pas si dramatique ce ça
@pluche
Pierre
Marsh Posté le 21-08-2019 à 14:58:26
Bonjour,
Désolé pour mon absence, vacances, tout ça…
Pour répondre à une question posée, je suis en effet dans le cas où le nombre de champs ainsi que certains noms peuvent être amener à changer d'un enregistrement à l'autre. Créer un champs pour chacun ne serait donc pas pratique du tout.
J'étais au départ parti sur cette solution, et je me suis rabattu sur le JSon ensuite au vue des soucis que ça posait.
Le truc Pierrot_77 c'est que avec ta requête on part du principe qu'on connait déjà les noms de clés (ici "intitule" et "fin" ), mais ce ne sera pas forcément le cas, vu que ces clés en question peuvent changer d'un enregistrement à l'autre (j'ai un cas où il n'y a pas "fin" par exemple).
J'ai posé la question sur Stackoverflow et une personne m'a répondu avec une requête qui fonctionne (je devrai attendre de revenir au boulot pour retrouver la page en question), c'est une requête à rallonge qui fonctionne, mais qui montre bien comme vous le dites que stocker sous forme JSon n'est pas vraiment une bonne solution… Suf que là je ne voyais pas trop comment faire autrement.
Je mettrai à jour ce message dès que j'aurai récupéré la requête en question.
En tout cas merci!
Marsh Posté le 02-08-2019 à 15:23:01
Bonjour,
J'ai dans une table un champs de type Json formaté comme ceci:
Ma question est: quelle requête dois-je faire pour "extraire" les noms des clés (ici représenté "Intitule" et "Fin" ), le "name" de chacune, pour celle qui ont comme valeur "is_filters=true".
Je tourne en rond depuis quelque temps sans parvenir à trouver une solution…
Par avance merci!