Archives par mot-clé : LIKE

Mysql et la recherche sur plusieurs champs : avec CONCAT ou CONCAT_WS

Publié dans SQL | 3 commentaires

Après avoir parlé un peu de la recherche en MySQL via LIKE puis REGEXP, et avant d’aller plus loin, parlons un peu de la recherche dans plusieurs champs à la fois. Eh oui, c’est possible grâce à CONCAT, ou plutôt CONCAT_WS.
Prenons une table contenant les billets d’un blog, et donc possédant les champs id, titre et contenu. Une recherche classique cherchera un mot clef dans le titre et dans le contenu du billet. Pour cela, on pourrait utiliser OR, mais un CONCAT qui concatène (i.e. met l’un à la suite de l’autre) le contenu de titre et de contenu, c’est pas mal aussi ! Exemple à l’appui :

SELECT * FROM billet WHERE CONCAT(titre, contenu) LIKE "%mot%clef%";

On peut ainsi concaténer autant de champs que l’on souhaite. Un petit détails cependant, si l’un de ces champs est NULL, le résultat renvoyé est NULL. Ce qui implique qu’un article sans titre dont le contenu correspond au mot clef, ne sera pas récupérée. Même si l’exemple est débile, c’est un peu dommage. Pour éviter cela, il convient d’utiliser CONCAT_WS qui fonctionne de la même manière, sans se soucier des champs vides.
Le deuxième exemple ci-dessous est certes moins compréhensible, mais il illustre ce dont nous venons de parler, et explique bien l’intérêt d’utiliser CONCAT plutôt que OR dans certains cas.

SELECT * FROM billet WHERE CONCAT_WS(date, ' ', heure, 'h', minute) LIKE "10/11/2009 23h30";

Bien sûr, il est possible d’utiliser la commande REGEXP au lieu de LIKE ! Bref, vive la concaténation !

Puisque ses rétroliens ne semblent pas fonctionner, merci à CrazyCat de G33k-zone pour m’avoir fait découvrir cette commande SQL bien utile.

Mysql et la recherche : avec LIKE

Publié dans SQL | Un commentaire

Souvent pour un moteur de recherches sur un site, on propose à l’utilisateur d’entrer un mot clef que l’on cherchera ensuite dans une base de données pour renvoyer les résultats le contenant. Ce billet, et 2 autres qui le suivront, vont présenter 3 méthodes pour effectuer ce type de recherche, en commençant par l’utilisation de LIKE. La première méthode pour effectuer une recherche avec Mysql est d’utiliser LIKE sur un champ texte.

SELECT * FROM table WHERE message LIKE "mot clef";

Cette requête renverra tous les tuples dont le champ message contient exactement la valeur « mot clef », quelque soit la casse. Pour que le résultat dépende de la casse, il faut utiliser LIKE BINARY :

SELECT * FROM table WHERE message LIKE BINARY "Mot Clef";

Mais LIKE permet de faire bien plus que cela. Pour recherche le mot « mot clef » qui se trouverait en plein milieu d’une phrase, on va utiliser le pourcentage ( % ). Le pourcentage est un joker qui correspond à « ou ou plusieurs caractères, n’importe lequel » ou à « pas de caractère ».

SELECT * FROM table WHERE message LIKE "%mot clef%";

Par exemple, les phrases : « Bonjour, j’aime ce joli mot clef tout bleu » ou « Salut beau mot clef » seront renvoyé par cette requête. Mais pas « Salut jolis mots clefs ». Dans le même style, on peut utiliser l’underscore ( _ ), c’est un autre joker qui correspond à « un et un seul caractère, n’importe lequel ».

SELECT * FROM table WHERE message LIKE "%mot_ clef_";

Continuer la lecture