Page 1 sur 1
Recherche sur 2 champs
Posté : 28 oct. 2008, 20:03
par Vince62000
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!!
Posté : 28 oct. 2008, 20:19
par stopher
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)...
Posté : 29 oct. 2008, 12:29
par Vince62000
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!!
Posté : 29 oct. 2008, 12:45
par stopher
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;
Posté : 29 oct. 2008, 13:50
par albat
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;
}
Posté : 12 nov. 2008, 10:21
par vince62fr
Ok merci à tous!
Posté : 12 nov. 2008, 11:48
par Visiteur du futur
Top!!! Un grand merci !!
++