Requete SQL

kenicki -  
tafiscobar Messages postés 1281 Statut Contributeur -
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

  1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    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
  2. tafiscobar Messages postés 1281 Statut Contributeur 177
     
    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