Requete SQL

Fermé
kenicki - 19 mars 2002 à 15:46
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 - 20 mars 2002 à 16:08
Bonjour,
Voila j'ai une base de données avec plein de champs (par exemple nom, age,
pays, ville, nationalité...).
Mon but est de faire une recherche sur différents champs de cette base.
Je m'explique l'utilisateur va arriver sur un formulaire de recherche et
aura le choix de remplir entre 1 et 4 champs pour exécuter sa recherche
(selon si il veut la nationalité, ou l'age et la nationalité ...).
Pour le moment ce que j'ai fait c'est que j'ai testé tous les champs qui me
sont renvoyés par le fomulaire et j'ai défini une requête pour chaque
résultat de test.
De ce fait ma page de traitement est très "lourde", c'est pourquoi
j'aimerais savoir si il n'y a pas une solution plus simple !!!

Merci pour vos réponses
Pierre

2 réponses

asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 23 novembre 2024 426
19 mars 2002 à 16:26
salut

bon premierement si tu a qutre champs dans ton formulaire tu ne dois pas avoir plus de quatre requetes

apres tu as deux option

1- tu effectue les 4 requêtes tu utilise ton curseur pour remplir quatre table que tu compares...(tres lent et assez fastidieux)

2- tu concatene les chaines de requetes avec union et inter puis tu envoi la requete finale

du genre
SI CHAMP 1 non nul
req_princ.= req_champ1
SI req_princ non nulle && CHAMP 2 non nul
req_princ.=UNION
req_princ.=req_champ2
SINON
req_princ.=req_champ2
...

envoi req_princ.
0
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
20 mars 2002 à 16:08
moi,j'ai une autre idee, tu sais, tu vas sur chaque champ, voir s'il est vide ou non et s'il n'est pas vide, tu l'ajoute a ta requete,voici un exemple, c'est plus explicite :
soient les 4 champs nat,age,sexe,CouleurY(pas un autre exeemple)
$query = " select * from table where ";
if(!empty($nat))
{
$query += " Nat = "
$query += $nat
}
if(!empty($age))
{
$query += " or Age = "
$query += $age
}
if(!empty($sexe))
{
$query += " or Sexe = "
$query+= $sexe
}
if(!empty($CouleurY))
{
$query += " or CouleurY = "
$query += $CouleurY
}

mysql_query($query);
de ce fait, tu executes ta requete une seule fois, d'ailleurs, pour une meilleure tu peux faire une fonction qui ajoute une requete ds le cas a ta string et ainsi, tu pourras l'etendre a un cas de plus de 10 criteres et c'est plus lisible

tafiscobar
0