Recherche sur 2 champs

Vince62000
Invité n'ayant pas de compte PHPfrance

28 oct. 2008, 20:03

Bonjour à tous,

Je n'arrive pas à rechercher sur 2 champs en même tps.
Je m'explique: j'ai une table "membre" dans laquelle j'ai un champ "nom" et un champ "prenom".
Lorsque j'effectue une recherche prenom+nom il ne me trouve pas de résultats. Par contre si je cherche le nom ou le prenom, là tout va bien.

Voici ma requete:

Code : Tout sélectionner

$selectMembre = myQ("SELECT *FROM `users` WHERE (nom LIKE '%".($query)."%') OR (prenom LIKE '%".($query)."%')");
Cette requete me renvoi un résultat si je cherche "jean" et "dupond" mais rien sur "jean dupond".
Une idée?

Merci!!

ViPHP
ViPHP | 1136 Messages

28 oct. 2008, 20:19

Salut,

C'est à cause des espaces ...

En effet aucun nom ni prenom contient la chaine jean dupond
Pour effectuer une recherche sur "jean dupond" il faut découper ta chaine au niveau des espaces , et donc agrandir ta requête (dynamiquement)...

Vince62000
Invité n'ayant pas de compte PHPfrance

29 oct. 2008, 12:29

Salut,

C'est à cause des espaces ...

En effet aucun nom ni prenom contient la chaine jean dupond
Pour effectuer une recherche sur "jean dupond" il faut découper ta chaine au niveau des espaces , et donc agrandir ta requête (dynamiquement)...
ok merci, peux tu m'éclairer plus précisement? J'ai tenté un explode, mais je n'arrive pas à creer la chaine de valeurs.
Merci!!

ViPHP
ViPHP | 1136 Messages

29 oct. 2008, 12:45

Voici le genre de script pour creer ta requete , attention tt de meme , ce genre de requete est tres groumande en ressources , si ta base est grande , et que tu as beaucoup de mots clef .. mais ça fonctionne tres bien pour de bases de petites taille
$chaine	=	"jean dupond";

(array)$key	=	explode(" ",$chaine);

(int)$nbWord	=	count($key);
(int)$cpt	=	0;
(string)$sql	=	"SELECT *FROM `users` WHERE ";

for( ;$cpt<$nbWord;$cpt++ )
{
	if( $cpt	!=	($nbWord-1))
	{
		$sql	.=	"(nom LIKE '%".$key[$cpt]."%') OR (prenom LIKE '%".$key[$cpt]."%') OR ";
	} else {
		$sql	.=	"(nom LIKE '%".$key[$cpt]."%') OR (prenom LIKE '%".$key[$cpt]."%')";
	}
	
}
echo $sql;

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

29 oct. 2008, 13:50

Pour parcourir un tableau, rien ne vaut un foreach() ;)

Et puis, c'est beaucoup plus simple ainsi :
$chaine   = "jean dupond";
$elements = explode(" ",$chaine);
$sql      = "SELECT champ1, champ2 FROM users WHERE "; // SELECT * est à proscrire
$premier  = true;
foreach ($elements as $value)
        { $sql .= ($premier ? "" : " OR ")."(nom LIKE '%".$value."%' OR prenom LIKE '%".$value."%')";
          $premier = false;
        }

vince62fr
Invité n'ayant pas de compte PHPfrance

12 nov. 2008, 10:21

Ok merci à tous!

Visiteur du futur
Invité n'ayant pas de compte PHPfrance

12 nov. 2008, 11:48

Top!!! Un grand merci !!
++