Fonction de recherche

Mushcmwa Messages postés 4 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 1 avril 2010 - 30 mars 2010 à 00:51
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013 - 5 avril 2010 à 12:18
Bonjour (bonsoir) a tous,

Je développe actuellement un forum en coldfusion, j'arrive au bout mais je me casse la tête depuis quelques heures pour essayer d'implémenter une recherche dans tout mon forum.

Ma première question porte sur la requête SQL. Comment faire pour séparer les différents mots tapés dans la recherche, ceux ci seront séparés par des expaces?

Ensuite, comment comparer un champ de ma table avec chaque terme de la recherche séparément? Pour le moment je suis arrivé à comparer seulement si un seul terme est inséré dans la recherche, mais je bloque sur un recherche multi-mots.

Toute aide est la bienvenue, aussi infime qu'elle soit, parce que là je ne sais plus comment faire.

3 réponses

nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
1 avril 2010 à 09:22
Bonjour,

je comprend pas où est ton problème, utilise le 'OR' SQL

Where champX '%motA%' OR champX '%motB%'


Nickadele
non, ma belle ne s'appel pas Adèle
Mon Blog
0
Mushcmwa Messages postés 4 Date d'inscription mardi 30 mars 2010 Statut Membre Dernière intervention 1 avril 2010
1 avril 2010 à 15:09
Je détaille un peu plus,

- Ma recherche est stockée dans une variable appelée 'rech' qui peut donc contenir un ou plusieurs mots.
- J'ai 3 tables dans ma DB, une table de thème, une table de sujet et une table de réponses.

Voici a quoi ressemble un affichage :

- thème1
--- sujet1
------ reponse1
------ reponse2
--- sujet2
------ reponse
--- sujet3

J'ai essayé pas mal de choses et chaque fois j'ai un résultat incomplet.
Tout d'abord,

SELECT * FROM reponses,sujet,themes
WHERE reponses.fk_sujet = sujets.id_sujet
AND sujets.fk_theme = themes.id_themes (les jointures habituelles)
AND (theme LIKE '%#rech#%'
OR sujet LIKE'%#rech#%' (theme,sujet,reponse = variables contenant l'intitulé correspondant)
OR reponse LIKE '%#rech#%')

Bon après je pense que le problème se situe dans mes conditions d'affichage car je n'avais que les thèmes dans lesquels apparaissaient les mots de la recherche, mais dans le cas ou un sujet et/ou une réponse contient un terme de la recherche (mais pas le thème) ceux-ci ne s'affiche pas.

Donc j'aimerais savoir si ma requête parait correcte et éventuellement comment tester mes différentes conditions (et s'il y a un ordre précis pour le faire).

Ah aussi, j'ai un petit soucis, comment effectuer un cfif sur un LIKE SQL?
(j'ai essayé un IsDefined(......) ou un truc du genre mais ça avait pas l'air d'aller mieux, peut-être un soucis de programmation de ma part...)

PS : Merci nickadele pour toutes tes réponses sur tout le forum qui m'ont sorti plus d'une fois de la m****
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
5 avril 2010 à 12:18
Bonjour,

apparemment tu as des problèmes à différents niveaux.
Donc commence par le début.
Fait des tests (différentes valeurs) avec ton SQL et utilises CFDUMP pour afficher le résultat.
Attention car à mon avis tu devrais mettre un OUTHER JOINT entre tes tables, thèmes sans sujet ou sujet sans reponse.
Au niveau des conditions SQL, tu peux ajouter des cfif dans le SQL sans problème.
Ex : Un peu bête, mais c'est pour te montrer que c'est possible. Si ma boolean boolNom est à vrai je prend le Nom, sinon je prend le Prénom de ma table Client.
<cfquery>
SELECT <cfif boolNom>Nom<cfelse>Prenom</cfif>
FROM Client
</cfquery>


Nickadele
non, ma belle ne s'appel pas Adèle
Mon Blog
0
Rejoignez-nous