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.
3 Responses to Mysql et la recherche sur plusieurs champs : avec CONCAT ou CONCAT_WS