Page 1 sur 1
Moteur de recherche.
Posté : 17 oct. 2009, 22:21
par koliom
Bonsoir,
j'ai un léger soucis
Voila mon formulaire:
Code : Tout sélectionner
<form action="search.php" method="Post">
<input type="text" name="requete" size="10">
<input type="submit" value="Ok">
</form>
ma requete (fichier search.php):
Code : Tout sélectionner
nom="$query = mysql_query("SELECT * FROM infos_tbl WHERE nom OR prenom LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error());">
et l'affichage des résultats:
Code : Tout sélectionner
<?php echo htmlentities(trim($donnees['prenom'])); ?> <?php echo htmlentities(trim($donnees['nom'])); ?>
Le problème:
Imaginons une personne s'appellant robert machin.
Si je recherche machin,
Si je recherche robert, il me le trouve
Si je recherche robert machin, pas de résultats.
Le soucis vient de ma requete mais je ne sais pas comment faire.
Une idée ?
Re: Moteur de recherche.
Posté : 18 oct. 2009, 03:15
par fab
Alors si tu veux chercher dans les deux champs en m^me temps tu peux essayer d'utiliser
CONCAT() et fait un LIKE sur le CONCAT()

Re: Moteur de recherche.
Posté : 18 oct. 2009, 05:12
par koliom
Re,
bon je regarderais ca plus précisemment demain vu que je suis fatigué la.
En faisant ceci;
$query = mysql_query("SELECT * FROM infos_tbl WHERE nom LIKE '%".$requete."%' OR prenom LIKE '%".$requete."%' OR CONCAT(prenom, nom) LIKE '%".$requete."%' ORDER BY id DESC") or die (mysql_error());
ca ne fonctionne pas
et en faisant ca:
$query = mysql_query("SELECT * FROM infos_tbl WHERE nom LIKE '%".$requete."%' OR prenom LIKE '%".$requete."%' OR CONCAT( prenom, '', nom) LIKE '%".$requete."%' ORDER BY id DESC") or die (mysql_error());
Il arrive à me trouver si et seulement si j'accroche le nom et le prenom (dans mon exemple: robertmachin, il me le trouve)
Re: Moteur de recherche.
Posté : 18 oct. 2009, 08:27
par stopher
Je serais toi , je ferais une recherche en utilisant FULLTEXT ( donc MATCH ) qui te simplifiera la vie , et sera plus performant et précis que LIKE .
Sinon, pour like , il faut que tu découpes ta chaine pour avoir une liste de mots , et pour chaque mot concaténer ta requête avec un OR LIKE %tonmot%
good luck ,
Ch.
Re: Moteur de recherche.
Posté : 19 oct. 2009, 23:42
par koliom
Slt,
j'y arrive pas. Tant pis je vais essayer de chercher un script qui me conviendra.
J'espère en trouver.
Merci
Re: Moteur de recherche.
Posté : 28 févr. 2011, 23:05
par renaud Garnier
Je viens d'avoir le même problème...
ton code ne fonctionne pas
Code : Tout sélectionner
$query = mysql_query("SELECT * FROM infos_tbl WHERE nom LIKE '%".$requete."%' OR prenom LIKE '%".$requete."%' OR CONCAT( prenom, '', nom) LIKE '%".$requete."%' ORDER BY id DESC") OR die (mysql_error());
car il manque l'espace dans le concat... comme ceci tu peux chercher avec un espace :
Code : Tout sélectionner
$query = mysql_query("SELECT * FROM infos_tbl WHERE nom LIKE '%".$requete."%' OR prenom LIKE '%".$requete."%' OR CONCAT( prenom, ' ', nom) LIKE '%".$requete."%' ORDER BY id DESC") OR die (mysql_error());
Re: Moteur de recherche.
Posté : 08 mars 2011, 17:01
par moi
Je ne m'y connais pas en SQL mais si tu concatènes alors tu obliges l'utilisateur à formater sa chaîne de caractère d'une certaine manière or tu ne peux pas tout imaginer !
Si'l tape "nom prenom", ce n'est pas la même chose que "prenom nom" ou "nomprenom" ou encore "nom prenom" (avec 3 espaces)
D'après moi, il doit y avoir un moyen en php de casser ta chaîne puis de comparer les moceaux, comme tu l'as fait à $nom et $prenom mais là je ne suis pas du tout caler dessus