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 :

Filtres SQL problème de requête


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut Filtres SQL problème de requête
    bonjour à tous,
    j'ai une question sur une raquette SQL : je voudrai filtrer par département ET/OU par catégorie ET/OU par code postale. Quand je mets OU ça fonctionne mais quand je mets AND rien ne s'affiche. Quelqu'un peut m'aider ?
    Voici le code sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php mysql_select_db($database_annuaire, $annuaire);
    $query_rs_annonce = sprintf("SELECT * FROM an_annonce WHERE nomcat=%s AND dept=%s OR cp=%s", GetSQLValueString($colnomcat_rs_annonce, "text"),GetSQLValueString($coldept_rs_annonce, "text"),GetSQLValueString($colcp_rs_annonce, "int"));
    $query_limit_rs_annonce = sprintf("%s LIMIT %d, %d", $query_rs_annonce, $startRow_rs_annonce, $maxRows_rs_annonce);
    $rs_annonce = mysql_query($query_limit_rs_annonce, $annuaire) or die(mysql_error());
    $row_rs_annonce = mysql_fetch_assoc($rs_annonce);
    ?>

  2. #2
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    Personne n'a une idée ?
    du coup de je suis obligé de mettre AND sinon ça ne fonctionne pas.
    Je voudrai arriver à filtrer avec ET OU cad en remplissant un champ ET/OU 2 champs ET/OU trois champs. Merci d'avance.


    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
    $coldept_rs_annonce = "0";
    if (isset($_GET['dept'])) {
      $coldept_rs_annonce = $_GET['dept'];
    }
    $colnomcat_rs_annonce = "0";
    if (isset($_GET['cat'])) {
      $colnomcat_rs_annonce = $_GET['cat'];
    }
    $colcp_rs_annonce = "0";
    if (isset($_GET['cp'])) {
      $colcp_rs_annonce = $_GET['cp'];
    }
    mysql_select_db($database_annuaire, $annuaire);
    $query_rs_annonce = sprintf("SELECT * FROM an_annonce WHERE (dept=%s AND nomcat=%s AND cp=%s", GetSQLValueString($coldept_rs_annonce, "text"),GetSQLValueString($colnomcat_rs_annonce, "text"),GetSQLValueString($colcp_rs_annonce, "int"));
    $query_limit_rs_annonce = sprintf("%s LIMIT %d, %d", $query_rs_annonce, $startRow_rs_annonce, $maxRows_rs_annonce);
    $rs_annonce = mysql_query($query_limit_rs_annonce, $annuaire) or die(mysql_error());
    $row_rs_annonce = mysql_fetch_assoc($rs_annonce);

  3. #3
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut
    les requêtes sql sont bornées et ce jouent par priorité. donc un "et / ou " n'existe pas tu doit générer autant de cas que tu le souhaites en réalisation séparé par des () pour limité cas.

    (nomcat=%s AND dept=%s) OR (nomcat=%s and cp=%s) or ( etc ....) or ( ....)

    je pense que tu auras plus d'aide dans la section SQL que DW puisque la question n'y est pas liée.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    Bonjour et merci pour cette réponse.
    Effectivement ça fonctionne en filtrant sur 2 champs.
    Mais impossible sur 3 champs
    Si je fais (nomcat=%s AND dept=%s AND cp=%s) alors ça affiche le nombre total d'enregistrement

    une petite idée ? c'est quand même spécifique à Dreamweaver si je pose la qestion dans SQL j'ai peur de ne pas avoir de réponse.*

    Merci d'avance

  5. #5
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut
    affiche ta requête en clair pour vérifier qu'elle est correct. car en principe sauf si tout tes éléments choisi on un même nomcat, dept, cp tu ne devrais avoir que ceux disposant de ses infos.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 71
    Par défaut
    voici la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM an_annonce
    WHERE (dept=coldept OR cp=colcp OR nomcat=colnomcat)  OR (dept=coldept AND cp=colcp AND nomcat=colnomcat) OR (cp=colcp AND nomcat=colnomcat) OR (dept=coldept AND cp=colcp) OR (dept=coldept AND nomcat=colnomcat) OR (cp=colcp OR nomcat=colnomcat) AND (dept=coldept OR cp=colcp) AND (dept=coldept OR nomcat=colnomcat)
    je l'affiche aussi sans code pour être plus lisible :

    SELECT *
    FROM an_annonce
    WHERE (dept=coldept OR cp=colcp OR nomcat=colnomcat) OR (dept=coldept AND cp=colcp AND nomcat=colnomcat) OR (cp=colcp AND nomcat=colnomcat) OR (dept=coldept AND cp=colcp) OR (dept=coldept AND nomcat=colnomcat) OR (cp=colcp OR nomcat=colnomcat) AND (dept=coldept OR cp=colcp) AND (dept=coldept OR nomcat=colnomcat)

Discussions similaires

  1. [SQL] Problème de requête et <tr>+<td>
    Par ruty dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 15/08/2006, 09h10
  2. [SQL] Problème bizarre requête date
    Par masseur dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/02/2006, 13h12
  3. [Oracle] [SQL] problème de requête
    Par joselito dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 25/01/2006, 12h55
  4. [SQL]problème de requête.
    Par shnouf dans le forum Oracle
    Réponses: 21
    Dernier message: 24/01/2006, 11h12
  5. [SQL] Problème de requête SQL de plus de 8060 caractères ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 13
    Dernier message: 06/04/2005, 15h07

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