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: P> mais depuis que je fais une recherche que je n'ai pas réellement la recherche Array Je crée une requête de recherche comme: p> Comment puis-je aussi rechercher des balises spécifiques dans cette même requête? Quelque chose sur: p> où EDIT:
Je viens de réaliser que les colonnes JSON ne sont que des cordes, ce qui me permet de le faire: p> existe quelque chose de mal avec cette méthode? P> p> ["1", "2", "3", "4", "5"] code> p>
server_tags code> est la colonne que je souhaite rechercher et
['1', '2', '3' ] code> sont plusieurs balises que je souhaite rechercher. p>
3 Réponses :
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). p>
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
)
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.
Le problème avec cette méthode: 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> 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> 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'
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.