Recherche sur 2 champs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Recherche sur 2 champs

par Visiteur du futur » 12 nov. 2008, 11:48

Top!!! Un grand merci !!
++

par vince62fr » 12 nov. 2008, 10:21

Ok merci à tous!

par albat » 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;
        }

par stopher » 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;

par Vince62000 » 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!!

par stopher » 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)...

Recherche sur 2 champs

par Vince62000 » 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!!