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 :

Construction de la condition pour une recherche multicritères [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Par défaut Construction de la condition pour une recherche multicritères
    Bonsoir,

    Voilà, pas de soucis avec les champs simples mais comment faire le WHERE quand , depuis un SELECT, je veux faire ma recherche soit sur un item de la liste (çà j'arrive) soit sur TOUS les items de la liste ?

    J'ai pensé à "AND statut IN (Active, Autre, Compromis,etc.)" mais si je rajoute un statut ultérieurement il faudra que je reprenne toutes les requêtes.

    Une idée ? une solution ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    if(isset($_POST['statut']) && !empty($_POST['statut'])) {
    if((isset($_POST['statut'])) = 'Tous') {  // Si tous les statuts :  AND statut IN (Active, Autre, Compromis,etc.)		?
    $where.=.'AND ';
    }
    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 344
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 344
    Billets dans le blog
    17
    Par défaut
    D'où provient ta liste de statuts ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Par défaut C'est tout simple
    S'il y a un critère vous ajoutez une condition dans le Where sinon vous ne l'ajoutez pas.
    Pour avoir un select du type :
    SELECT col1, col2 ... FROM t1 WHERE c1=valeur1
    ou
    SELECT col1, col2 ... FROM t1 WHERE c1= valeur1 AND c2=valeur2
    Remarques :
    1 - L'opérateur de comparaison d'égalité est == et non pas =
    2 - Votre besoin n'est pas apparemment multi-critères mais plutôt 1 ou tous;
    Si vous deviez gérer 0 ou 1 ou N la solution serait différente

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Par défaut Un exemple simple
    Pour compléter ma réponse.
    voici un début de script, ensuite il suffit d'insérer dans la BD.
    Admettons une table Personnes(id, prenom, age, statut).
    Et une sélection sur l'âge et le statut.
    Testez, inutile pour voir le fonctionnement d'avoir la table dans la BD.

    <?php
    if(isSet($_GET["cb_valider"]))
    {
    $age = $_GET["age_mini"];
    $statut = $_GET["statut"];

    $sql = "SELECT * FROM personnes WHERE age >=$age ";
    if($_GET["statut"] != "tous" && $_GET["statut"] != "") $sql .= " WHERE statut ='$statut'";
    echo $sql;
    }

    ?>

    <form action="" method="get">
    <label>Recherche</label><br />
    <label>Age mini</label><input name="age_mini" type="text" value="10" />
    <select name="statut" size="3">
    <option value="homme">Homme</option>
    <option value="femme">Femme</option>
    <option value="enfant">Enfant</option>
    <option value="tous">Tous</option>
    </select>
    <input type="submit" name="cb_valider" />
    </form>

    Remarque :
    utilisation de la méthode "get".
    Sémantiquement le POST est réservé aux modifications de ressources serveur.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Par défaut Reponse à SEB
    Bonjour,
    STATUT est une table de la base

    Merci de ta réponse. En fait j'ai un "select" dynamique (alimenté par la table statut) dans ma recherche multicritères. Je souhaite pouvoir faire une recherche soit sur UN statut soit sur TOUS les statuts (TOUS n'est pas un champs de la table).

    La question c'est de savoir comment je dois formuler ma requête ?

    // Cas 1 : l'utilisateur a choisi un statut
    Sélectionne le statut depuis la table statut ou statut = valeur saisie;
    // Cas 2 : l'utilisateur ne choisit pas un statut donc il veut voir tous les enregistrements quelque soit leur statut
    Si statut = 'tous' ... ?

    Dans le cas 2, faut il laisser le champs vide ou "nommer" chaque valeur de statut ?
    cad :
    Si statut = 'tous'
    Sélectionne statut depuis statut ou statut = ... OR statut = .. OR etc.
    ou bien
    Je laisse la condition vide, comme ça il prend tous les enregistrements sans se soucier du statut ?

    J'espère que je suis clair.
    Merci de votre aide.

    PS. Si vous connaissez un bon tutoriel qui explique simplement comment rédiger des requêtes un peu complexes, je suis preneur.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Par défaut Réponse à pascalbuguet
    Bonjour et merci de ta réponse.

    J'ai appris quelque chose à propos de la sémantique (get et post).

    Je modifie ma requête et teste ton exemple de code. J'ai répondu à SEB en précisant mon attente en français. Donc si tu as quelque chose à ajouter ...

    Bonne journée

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

Discussions similaires

  1. Procedure stockée pour une recherche multicritère
    Par souma21 dans le forum Développement
    Réponses: 5
    Dernier message: 14/05/2012, 16h28
  2. 2 conditions pour une recherche
    Par laurentSc dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/09/2011, 16h31
  3. [XL-2010] Macro ou Formule pour une recherche verticale avec condition
    Par Orsaylg dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/09/2010, 13h22
  4. Importance des accents pour une recherche dans postgre
    Par glouf dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 05/03/2005, 13h25
  5. [VB.NET] Quel objet tableau pour une recherche indexée ???
    Par Kitano dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/09/2004, 09h38

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