Recherche Dans base de données

gatita_dev Messages postés 135 Date d'inscription vendredi 27 mai 2005 Statut Membre Dernière intervention 5 février 2008 - 22 nov. 2007 à 11:40
gatita_dev Messages postés 135 Date d'inscription vendredi 27 mai 2005 Statut Membre Dernière intervention 5 février 2008 - 22 nov. 2007 à 19:03
Bonjour,
Je veux effectuer un moteur de recherche dans une base de données, quand je cherche un seul mot ça marche mais dés qu'il y a plusieurs mot ça retourne rien. Est ce que quelqu'un peut m'indiquer comment je peux le faire?
Merci 

6 réponses

esus1985 Messages postés 76 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 26 février 2009
22 nov. 2007 à 11:43
Bonjour,

peux tu nous mettre ton code s'il te plait, ca ira mieu pour trouver la cause ^^
0
gatita_dev Messages postés 135 Date d'inscription vendredi 27 mai 2005 Statut Membre Dernière intervention 5 février 2008
22 nov. 2007 à 15:42
En fait, j'ai mis juste le code pour chercher un seul mot et j'ai pas trouvé la méthode pour traiter plusieurs mots, j'ai utiliser la requête suivante
select * from news where titre like '%"

& Mot1
&
"%' and description like '%" & Mot1
  &
"%' or description like '%" & Mot1 
&
"%' or titre like '%" & Mot1 &
 
"%'"

Ma question c'est comment je peux faire pour que je puisse chercher plusieurs mot?

Merci
0
esus1985 Messages postés 76 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 26 février 2009
22 nov. 2007 à 17:15
c'est du pur sql a ce niveau la.

Tout dépend ce que  tu veux :

mot1 et mot2




"select * from news where (titre like '%" & mot1 & "%' or description like '%" & mot1 & "%') and (titre like '%" & mot2 & "%' or description like '%" & mot2 & "%') "


mot1 ou mot2.

"select * from news where (titre like '%" & mot1 &
"%' or description like '%"
& mot1 &
"%') OR(titre like '%"
& mot2 &
"%' or description like '%"
& mot2 &
"%')"

après, si tu veux que le nombre de mot varie, tu mets une boucle sur l'écriture du where.

n'oublies pas les parenthèses, c'est mieu d'être rigoureux à ce niveau là.

j'ai fait un test en sql directement



select



*




from

matable

where




(

champ1

like




'%mot1%'




or

champ2

like




'%mot1%'

)or(

champ1

like




'%mot2%'




or

champ2

like




'%mot2%'



)




ca passe.
0
gatita_dev Messages postés 135 Date d'inscription vendredi 27 mai 2005 Statut Membre Dernière intervention 5 février 2008
22 nov. 2007 à 17:55
Oui ça marche mais je sais pas comment récuperer chaque mot à part en asp.net, parce que j'aurai une chaine que je doit divider en mot.
Est ce que je met la chaine dans un tableau et puis générer automatiquement la requete sql selon le nombre de mot?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
esus1985 Messages postés 76 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 26 février 2009
22 nov. 2007 à 19:00
alors, comme ca de tête,

si tu as une chaine avec "mot1 mot2 mot3" (les mots ne contenants pas d'espace ou alors sinon, tu separes par un autre caractère que l'espace)

tu utilise la fonction split
mavar=split(ListeDeMot," ")

la variable mavar deviens un tableau contenant les mots

ensuite tu fais un
i=0
dim req="SELECT* from news where "

for i = 0 to ubound(mavar) 'ubound envoyant l'indice le plus elevé du tableau
   if i = 0 then
req = req & "(titre like '%" & mot1 & "%' or description like '%" & mot1 & "%')
else
req =req & and "(titre like '%" & mot1 & "%' or description like '%" & mot1 & "%')
end if

next

et tu executes ta requête.

voila, c'est fait a l'arrache masi ca devrait fonctionner ^^

bonne soirée
0
gatita_dev Messages postés 135 Date d'inscription vendredi 27 mai 2005 Statut Membre Dernière intervention 5 février 2008
22 nov. 2007 à 19:03
Ok, Merci je vais tester et je te tiendrai aux courant
0
Rejoignez-nous