Recherche Dans base de données

Signaler
Messages postés
135
Date d'inscription
vendredi 27 mai 2005
Statut
Membre
Dernière intervention
5 février 2008
-
Messages postés
135
Date d'inscription
vendredi 27 mai 2005
Statut
Membre
Dernière intervention
5 février 2008
-
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

Messages postés
76
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

Bonjour,

peux tu nous mettre ton code s'il te plait, ca ira mieu pour trouver la cause ^^
Messages postés
135
Date d'inscription
vendredi 27 mai 2005
Statut
Membre
Dernière intervention
5 février 2008

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
Messages postés
76
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

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.
Messages postés
135
Date d'inscription
vendredi 27 mai 2005
Statut
Membre
Dernière intervention
5 février 2008

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?
Messages postés
76
Date d'inscription
mercredi 1 juin 2005
Statut
Membre
Dernière intervention
26 février 2009

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
Messages postés
135
Date d'inscription
vendredi 27 mai 2005
Statut
Membre
Dernière intervention
5 février 2008

Ok, Merci je vais tester et je te tiendrai aux courant