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.
Tiens, mes rétro-liens ne marchent pas ? aurais-je loupé un épisode dans la configuration de dotclear ? Ils sont pourtant activés et non modérés.
Mais je ne suis pas bien doué avec les blogs moi…
Désolé, ceci n’est pas du flood mais une petite réponse à mon commentaire précédent:
un antispam activé par défaut dans dotclear bloque les trackbacks si le billet ne contient pas un lien vers le billet initial.
J’ai donc désactivé cette protection car il me semble que la réécriture d’url provoque d’étranges comportements dans la vérification.
CrazyCat > Du coup, j’ai bien remis le rétrolien, merci ! Et merci pour ton billet, ça m’a déjà bien servi.
J’avais déjà lu quelque chose au sujet de l’antispam en question, et ça explique que beaucoup de rétroliens ne sont pas accessibles. Enfin, pour ma part, je n’ai pas encore trouvé où le désactiver.