Vous n'êtes pas identifié(e).
Bonjour,
Je galère et j'aurais besoin d'aide pour construire ma requête SQL. J'ai sur mon site un petit moteur de recherche permettant aux visiteurs d'entrer un mot et de voir s'afficher les pages du site contenant ce mot. Je voudrais n'afficher dans la page résultats que la phrase contenant ce mot et non l'intégralité du champ texte, parfois fort long.
J'imagine bien qu'il faut utiliser INSTR() pour localiser la position du mot en question et SUBSTR() pour extraire la chaîne, mais je ne sais pas comment les combiner, ni comment en récupérer le résultat, ni comment trouver le point précédent l'occurence du mot et celui suivant l'occurence du mot afin d'extraire une phrase complète. J'ai essayé tellement de choses que je suis découragée et je mélange tout. Si quelqu'un peut m'aider, ce serait top !
Voilà la requête qui extrait la totalité du champ 'fr'
merci merci merci !!!
Hors ligne
Bonjour,
Bon c'est très fouilli, très brouillon, ça ne marchera sans doute que sous MySQL et je pense qu'il y avait plus simple... mais ça marche ^^
La logique est simple, pour aller chercher le point après le mot-clef on fait
c'est-à-dire qu'on cherche le mot clef puis le point qui se trouve après.
Donc pour aller chercher celui qui se trouve avant c'est
c'est-à-dire qu'on se contente de tout inverser.
Bon c'est très bien mais on a notre position à partir de la fin... bah SUBSTR peux prendre des valeurs négatives comme deuxième argument (il les compte à partir de la fin, ça tombe bien c'est juste ce qu'il nous faut), il nous suffit donc de mettre notre valeur précédente en négatif (et on rajoute 1 pour pas prendre le point).
Impec, y'a plus qu'à indiquer en troisième argument de SUBSTR le nombre de caractère qu'il doit prendre, donc le nombre de caractère jusqu'au prochain point... donc le premier point de la chaine qu'on vient de récupérer (argh !)
Ca fait bien long tout ça, mais bon, on rajoute ça en argument au premier SUBSTR et paf ça marche !
Voilà bon courage (et si d'autres membres ont un code moins long qu'ils n'hésitent pas).
Dernière modification par Sergnal (17-05-2010 14:23:18)
Hors ligne
Trop bien !!! ça maaarche !!!
J'ai ajouté un alias après le SUBSTR, juste avant le 'FROM wp_contenus' pour pourvoir récupérer le contenu de SUBSTR et ça fonctionne !
Merci mille fois Sergnal d'avoir pris le temps de m'expliquer tout ça !...j'étais bien loin de la solution !:):):)
Hors ligne
Tout le plaisir est pour moi ^^
Hors ligne
Saluton,
Ça fait bien des calculs côté SGBD, je pense que récupérer la totalité des colonnes `fr` qui vérifient le LIKE et leur passer un coup de regexp à l'arrivée en PHP, serait moins gourmand.
Encore faut-il écrire l'expression rationnelle idoine, mais je ne m'y risquerais pas.:P
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Moi non plus, mais en php il existe les fonctions strpos(), strrev() et substr() qui devraient permettre de faire exactement la même chose que le SQL ^^
Ceci dit je suis d'accord sur le fait qu'une seule regex serait plus efficace que cet imbroglio de fonctions.
Hors ligne