0
votes

MySQL 5.7.27: Rechercher un tableau JSON

J'essaie de déterminer comment rechercher une colonne de matrice JSON d'une table. J'ai trouvé Cette question Stackoverflow Mais je ne suis pas clair sur la façon dont Json_Search fonctionne .

Dans les réponses, les gens semblent donner à JSON_Search Données directes à la recherche via: xxx

mais depuis que je fais une recherche que je n'ai pas réellement la recherche Array ["1", "2", "3", "4", "5"]

Je crée une requête de recherche comme: xxx

Comment puis-je aussi rechercher des balises spécifiques dans cette même requête? Quelque chose sur: xxx

server_tags est la colonne que je souhaite rechercher et ['1', '2', '3' ] sont plusieurs balises que je souhaite rechercher.

EDIT: Je viens de réaliser que les colonnes JSON ne sont que des cordes, ce qui me permet de le faire: xxx

existe quelque chose de mal avec cette méthode?


0 commentaires

3 Réponses :


0
votes

absolument rien n'est faux avec ce que vous avez fait, assurez-vous simplement que votre terme de recherche est propre pour éviter (injection SQL).


0 commentaires

1
votes

Si vous souhaitez vérifier l'existence de tout em> des balises, vous pouvez ou code> ensemble les résultats de JSON_SEARCH CODE> pour chacun d'eux:

AND (JSON_SEARCH(server_tags, 'one', '1') IS NOT NULL AND
     JSON_SEARCH(server_tags, 'one', '2') IS NOT NULL AND
     JSON_SEARCH(server_tags, 'one', '3') IS NOT NULL
    )


2 commentaires

C'est fantastique, merci pour votre aide. Je ne pouvais pas comprendre comment utiliser Json_Search du tout!


@Eight no inquiète - je suis content de pouvoir aider.



1
votes

Le problème avec cette méthode: xxx pré>

est que la correspondance générique ne sait rien sur les limites de la valeur. P>

Exemple: P> xxx pré>

puis recherchez la balise '1' à l'aide de votre méthode: p> xxx pré>

IT correspond! Parce que 112 est assorti par '% 1%'. P>

C'est l'un des Plusieurs raisons pourraient stocker un Liste des valeurs séparées par des virgules lorsque vous souhaitez rechercher des valeurs individuelles dans la liste. P>

Utilisation de JSON n'est que gênant comme à l'aide d'une liste séparée par des virgules. P>

Au lieu de cela, si vous souhaitez rechercher des valeurs individuelles, vous devez normaliser votre table. Stockage des balises une par rangée dans une table enfant: p> xxx pré>

alors vous pouvez rechercher eux comme des valeurs individuelles: p>

SELECT l.* FROM lista_server AS l 
JOIN lista_server_tags AS t ON (l.id = t.lista_server_id)
WHERE t.tag = '112'


4 commentaires

Pourriez-vous élaborer sur «Vous pouvez également utiliser un index pour accélérer la recherche». Assez nouveau pour construire mes propres bases de données, donc pas tout à fait sûr comment faire cela. Avez-vous des ressources pour apprendre à indexer?


Je fais: Comment concevoir des index, vraiment et Comment utiliser JSON dans MySQL Mauvaise .


Vous aimerez peut-être aussi mon livre: SQL AntiPatterns: Comment éviter les pièges de la programmation de la base de données .


Si vous êtes nouveau pour utiliser des bases de données, je vous recommande d'éviter d'utiliser le type de données JSON jusqu'à ce que vous comprenez comment utiliser des bases de données normalisées.