IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requete sql qui varie [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut Requete sql qui varie
    Bonjour,

    Je vais tenter d'expliquer clairement mon problème. Sur mon site internet l'utilisateur a 5 combo liste pour entre ses choix afin d'effectuer une recherche. Mon souci c'est comment créer une requête sql qui tiendra compte uniquement des paramètres entrés, je ne veux pas l'obliger à choisir des choses sur toutes les combo list.

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Bonjour,
    Supposons que tu as 5 combos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="combo1"></select> etc.
    avec un item par défaut dans chaque combo comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="0">Faites votre choix</option>
    Supposons aussi que ton formulaire envoie les données par POST.
    Il suffit de tester chaque combo et de construire la requête en fonction des champs sélectionnés par l'utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    <?php
    $critere = "";
    //vérifie si combo1 a une valeur différente de 0 (la valeur par défaut)
    if ($_POST['combo1'] != 0)
    {
        $critere = "WHERE champ1 = '".$_POST['combo1']."'";
    }
    //vérifie si combo2 a une valeur différente de 0 (la valeur par défaut)
    if ($_POST['combo2'] != 0)
    {
        if ($critere != "")
        {
            $critere .= " AND champ2 = '".$_POST['combo2']."'";
        }
        else
        {
            $critere = "WHERE champ2 = '".$_POST['combo2']."'";
        }
    }
    //vérifie si combo3 a une valeur différente de 0 (la valeur par défaut)
    if ($_POST['combo3'] != 0)
    {
        if ($critere != "")
        {
            $critere .= " AND champ3 = '".$_POST['combo3']."'";
        }
        else
        {
            $critere = "WHERE champ3 = '".$_POST['combo3']."'";
        }
    }
    //vérifie si combo4 a une valeur différente de 0 (la valeur par défaut)
    if ($_POST['combo4'] != 0)
    {
        if ($critere != "")
        {
            $critere .= " AND champ4 = '".$_POST['combo4']."'";
        }
        else
        {
            $critere = "WHERE champ4 = '".$_POST['combo4']."'";
        }
    }
    //vérifie si combo5 a une valeur différente de 0 (la valeur par défaut)
    if ($_POST['combo5'] != 0)
    {
        if ($critere != "")
        {
            $critere .= " AND champ5 = '".$_POST['combo5']."'";
        }
        else
        {
            $critere = "WHERE champ5 = '".$_POST['combo5']."'";
        }
    }
     
    //construction de ta requête
    $sql = "
        SELECT colonne1, colonne2, colonne3, ...
        FROM table
        ".$critere."
    ";
     
    //exécution de ta requête
    $qry = mysql_query($sql) or die(mysql_error());
    // etc.
    ?>
    Bien cordialement,

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut
    Bonjour,

    Je te remercie infiniment pour ton aide, je vais tout de suite tester cela.

    Grand merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut
    Re,

    Cela fonctionne à merveille Alors pour réaliser ma requête totalement la les informations à filtrer se trouvent en réalité sur 2 tables différentes, pour les lier j'ai une colone commune qui est user_id, pouvez-vous m'aider sur cette dernière requete ?

    Merci

  5. #5
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Bonjour,

    La solution serait d'utiliser une jointure (Cf. FAQ).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //construction de ta requête (exemple)
    $sql = "
        SELECT table1.colonne1, table1.colonne2, table2.colonne3, ...
        FROM table1
        INNER JOIN table2 ON table2.user_id = table1.user_id
        ".$critere."
    ";
    Bien cordialement,

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut
    Bonjour,

    Effectivement cela a l'air de marcher

    Par contre pour la requete d'hier en affichant la requete sql généré je m'apperçois qu'il ne tient en compte que la dernière requete. Si je sélectionne des choses dans les 3 combo liste, il ne prend que le dernier parametre dans la variable critère.

    As-tu une idée là dessus ?

    Merci

  7. #7
    Membre Expert
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Par défaut
    Bonjour,
    D'après le fichier que je joints en PJ, je n'ai pas ce résultat-là.
    Bien cordialement,
    Fichiers attachés Fichiers attachés

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7
    Par défaut
    Bonjour,

    Oui j'ai tout repris à zéro avec ton fichier et ça marche parfaitement Merci beaucoup pour ton aide précieuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/11/2006, 10h25
  2. [MySQL] requete sql qui ne donne pas le bon array
    Par easyjava dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 02/11/2006, 14h41
  3. [hibernate]requete SQL qui ne passe pas
    Par Gromitou dans le forum Hibernate
    Réponses: 8
    Dernier message: 09/06/2006, 12h18
  4. [MySQL] requete sql qui ne s'exécute pas
    Par anto48_4 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/03/2006, 09h12
  5. Réponses: 2
    Dernier message: 04/06/2004, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo