71 votes

Recherche d'une chaîne dans une colonne de texte en MySQL

J'ai une table mysql qui a une colonne qui stocke le xml comme une chaîne. J'ai besoin de trouver tous les tuples où la colonne xml contient une chaîne donnée de 6 caractères. Rien d'autre n'a d'importance - tout ce que je dois savoir, c'est si cette chaîne de 6 caractères est présente ou non.

Le fait que le texte soit formaté en xml n'a donc probablement aucune importance.

Question : comment puis-je effectuer une recherche dans mysql ? c'est-à-dire SELECT * FROM items WHERE items.xml [contains the text '123456']

Y a-t-il un moyen d'utiliser l'opérateur LIKE pour faire cela ?

0 votes

123voto

Mike Cialowicz Points 4490

Vous pourriez probablement utiliser le LIKE clause pour effectuer une simple correspondance de chaînes de caractères :

SELECT * FROM items WHERE items.xml LIKE '%123456%'

Si vous avez besoin de fonctionnalités plus avancées, jetez un coup d'œil aux fonctions de recherche plein texte de MySQL ici : http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html

1 votes

Comment puis-je modifier ceci pour l'utiliser avec une requête PHP ? J'ai une chaîne de caractères $message et je voudrais sélectionner la ligne avec cette chaîne exacte. J'ai SELECT * FROM Messages WHERE from_id = '$fromID' AND to_id = '$toID' AND message LIKE '$message' mais je ne pense pas que cela fonctionne

0 votes

Et si 123456 est le début de la chaîne, alors cela ne fonctionnerait pas.

1 votes

Timothymarois - le % correspond à zéro ou plusieurs caractères, il fonctionnera donc si la chaîne souhaitée se trouve au début, à la fin ou au milieu de ce que vous recherchez. Voir : w3schools.com/sql/sql_like.asp

12voto

Raj Points 21

L'utilisation de la méthode "like" peut prendre plus de temps, alors utilisez Recherche plein texte :

SELECT * FROM items WHERE MATCH(items.xml) AGAINST ('your_search_word')

11 votes

Est-il prouvé que cette méthode est plus rapide que le LIKE ?

4 votes

Il est important de noter que pour que cela fonctionne, il faut avoir FULLTEXT sur la colonne cible.

1 votes

Pour que d'autres personnes puissent en savoir plus, FTS est très différent de LIKE qui retournera des variantes de mots et de phrases, alors que FTS ne le fera pas. ex. LIKE '%123456%' retournera des résultats avec "0123456", "123456", "1234567" etc. Où AGAINST('123456') ne renverra que des résultats sous forme de mots simples à match contre comme "is 123456", "123456", "123456 is" etc. mais PAS trouver "0123456" ou "1234567" . Exemple : db-fiddle.com/f/5rJUTdDtV63RybnY4U9L2W/0 C'est pourquoi FTS peut être plus rapide sur des ensembles de données plus importants, car il n'effectue pas de balayage complet de la table, comme c'est le cas avec le système de gestion des données. LIKE .

6voto

Amy B Points 9363
SELECT * FROM items WHERE `items.xml` LIKE '%123456%'

Le site % opérateur en LIKE signifie "tout peut être ici".

5voto

systempuntoout Points 27584

Pourquoi ne pas utiliser LIKE ?

SELECT * FROM items WHERE items.xml LIKE '%123456%'

4voto

rytis Points 1854

Vous voulez dire :

SELECT * FROM items WHERE items.xml LIKE '%123456%'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X