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 :

Requête avec WHERE multi-critères [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 82
    Points
    82
    Par défaut Requête avec WHERE multi-critères
    Bonjour,

    J'aimerais faire une recherche multi-critères sur un champ mais je bloque pour automatiser le tout...

    Concrètement voici ce que j'aimerais faire :

    Un formulaire de sélection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form ...>
    <select name="statut">
    <option value="0-1" selected="selected">Ouvert / En cours</option>
    <option value="0">Ouvert</option>
    <option value="1">En cours</option>
    <option value="2">Clôturé</option>
    <option value="3">Corbeille</option>
    <option value="0-1-2-3">Tous</option>
    </select>
    </form>
    La requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
     
    $req = mysqli_query($db, "SELECT t_tickets.id, t_tickets.objet, t_tickets.date, t_clients.nom FROM t_tickets LEFT JOIN t_clients ON t_clients.id = t_tickets.id_cli WHERE t_tickets.statut = $_POST['statut']  ORDER BY t_tickets.date DESC");
    $res = mysqli_num_rows($req);
    ?>
    Si mon statut est 0, 1, 2, pas de problème, la requête s'éxecute bien. Par contre dès que le statut est 0-1, la requête ne s'éxecute plus parce qu'il faudrait faire "t_tickets.statut = 1 or t_tickets.statut = 0" mais je ne vois pas comment automatiser ce traitement. Auriez-vous une solution ? Merci d'avance.

  2. #2
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    regarde la fonction http://php.net/explode
    cette fonction permet de séparer la chaine de caractère suivant le caractère "-" et de produire un tableau

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 106
    Points : 82
    Points
    82
    Par défaut
    Merci pour ta réponse, voici le code entier pour ceux que ça pourrait intéresser.

    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
    <?php
    //Si on pas changé le statut par défaut, on affiche les tickets ouverts et en cours.
    if(!isset($_POST['statut'])) $statut = '0-1'; else $statut = $_POST['statut'];
     
    $current_statut = explode('-', $statut);//On met ds un tbl les enregistrements si il y en a plusieurs
    $nb_enr = count($current_statut); //On compte le nb d'enregistrements totals
     
     
    //On lit le tableau, et on met les résultats à la suite pour la requête
    $i=1;
    foreach($current_statut as $value){
    	$filtre_statut .= "t_tickets.statut = $value";
    	if($i<$nb_enr) $filtre_statut .= " or "; //Tant qu'on pas dépassé le nb d'enregistrements on met un "or" pour la requête
    	$i++;
    }
    echo $filtre_statut;
     
    $req = mysqli_query($db, 'SELECT t_tickets.id, t_tickets.objet, t_tickets.date, t_clients.nom FROM t_tickets LEFT JOIN t_clients ON t_clients.id = t_tickets.id_cli WHERE '.$filtre_statut.'  ORDER BY t_tickets.date DESC');
    ?>

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

Discussions similaires

  1. [MySQL] Requête avec WHERE 1 AND et plein de OR le AND n'est pas pris en compte
    Par alsaco68 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/01/2008, 10h09
  2. [MySQL] requête avec WHERE sur primary key
    Par newbiemac dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 04/09/2007, 09h41
  3. requête avec WHERE A < Date < B de semaine en semaine
    Par cortex024 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/06/2007, 14h41
  4. Problème de requête avec WHERE MAX()
    Par seb92500 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 24/01/2007, 12h27
  5. Requête avec date comme critère de sélection
    Par deep-diver dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/09/2006, 11h40

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