Bonjour,

Je débute dans l'utilisation des champs Json sur MySQL et je me retrouve confronté à un problème que voici:

J'ai dans une table un champs (nommé fields) de type Json formaté comme ceci:

{"Intitule":{"name":"Intitule","stats":false,"is_array":false,"is_filter":true,"chart":"pie","col":"6"},"Fin":{"name":"Date de fin","stats":false,"is_array":false,"is_filter":false,"chart":"pie","col":"6"}

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!

5 réponses


Pierrot01
Réponse acceptée

salut

where fields like '%is_filter=true%'

@pluche

Pierre

Pierrot01
Réponse acceptée

Salut
Essaye cette requête sur ta table :

    select  
        @pos1 := locate('{', fields,position('{' in fields)+1) as pos1,
        @pos2 := locate('}',fields) as pos2,
        @pos3 := locate('{',fields, @pos2+1) as pos3,
        @pos4 := locate('}',fields, @pos3+1) as pos4,
        substr(fields,@pos1,@pos2) as   intitule,
        substr(fields,@pos3,@pos4) as   fin
    from test_json;

en renomant la table évidement.

tu obtiens le "intitule" et le "fin", donc, tu fais le where sur ces champs.

j'ai tester la requête chez moi, elle fonctionne ;)
pour preuve :

Si tu es intéressé eet que tu ne comprends pas, je peux expliquer cette requête, ce qui éviterai que tu recopie bêtement :D :D
N'hésite pas à poser d'autre questions si tu ne comprends pas, je suis OK pour t'aider ;)
@pluche

Pierre

jouvrard
Auteur

Hum, oui... tout simplement... :D
Je partais sur des grosses requêtes en utilisant les possibilités JSon de MySQL 5.7, mais ça ne servait pas à grand chos en effet...

Bref, merci beaucoup, ça m'apprendra à chercher trop compliqué! :)

jouvrard
Auteur

Autant pour moi, je n'avais pas trop fait attention à la réponse apportée, mais ça ne peut pas fonctionner car j'ai plusieurs éléments dans mon tableau Json, et dans le lot j'en aurai forcément avec un is_filter=true, du coup dans tous les cas cette requête me ramènera tous mes enregistrements, pas que les éléments avec un is_filter=true.

Dans mon exemple, il doit me ramener "intitule" mais pas "Fin".
Or là, il se contentera de tout ramener.

jouvrard
Auteur

Salut,

Merci beaucoup pour cette nouvelle requête, après un peu de temps dessus j'ai compris oui. :)

Je vais voir tout ça dans les jours à venir mais j'ai aussi fait le test et ça fonctionne, donc la suite ne devrait plus me poser de problème.
Merci beaucoup!! :)