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

 MySQL Discussion :

Conditions multiples SQL?


Sujet :

MySQL

Vue hybride

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

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Par défaut Conditions multiples SQL?
    Bonjour,

    Je viens vers vous car je n'ai pas trouvé ce que je cherchais : comment renvoyer les résultats de champs si ils sont remplis, et ne pas les renvoyer si ils sont vides?
    je m 'explique : j ai une table /table/ , où j'ai disons 10 colonnes /colonnes1 ... colonnes10/
    je veux demander de m'afficher les colonnes1 à 3 , plus certaines colonnes seulement si elles sont avec des infos...par exemple afficher la colonne 5/6 et 7 si elles ont été remplies...
    suis assez clair?

    Car jusqu'ici, la demande me retourne tous les enregistrements, puisque les colonnes 1 à 4 sont remplies
    SELECT colonnes1,colonnes2,colonnes3,colonnes4,colonnes5,colonnes6,colonnes7 FROM table /// et là je mets quoi? WHERE ....

    suis perdu.

    Merci pour votre aide :-)

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    comment renvoyer les résultats de champs si ils sont remplis, et ne pas les renvoyer si ils sont vides?

    je veux demander de m'afficher les colonnes1 à 3 , plus certaines colonnes seulement si elles sont avec des infos...par exemple afficher la colonne 5/6 et 7 si elles ont été remplies...
    Pour bien exprimer le besoin, il est important d'utiliser les bons termes.
    Une table est composée de lignes et de colonnes, pas de champs.

    Le terme "enregistrement" que tu emploies est celui qui est le plus souvent employé à la place du bon terme "ligne".

    Le terme "vide" peut être interprété de deux manières et qui donnera deux résultats différents :
    - le marqueur NULL affichera NULL;
    - une chaîne vide '' n'affichera rien.

    Ta demande est ambigüe.
    Veux-tu n'afficher que les lignes pour lesquelles les colonnes 5, 6 et 7 ne sont pas NULL et/ou n'ont pas une chaîne vide ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WHERE col5 IS NOT NULL
      AND col5 <> ''
      AND col6 IS NOT NULL
      AND col6
      AND col7 IS NOT NULL
      AND col7
    Veux-tu afficher toutes les lignes et ne rien afficher (afficher une chaîne vide) quand les colonnes 5, 6 et 7 sont NULL et ou contiennent une chaîne vide ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT col1, col2, col3, 
      COALESCE(col5, '') AS col5,
      COALESCE(col6, '') AS col6,
      COALESCE(col7, '') AS col7
    COALESCE renvoie le premier argument non NULL et une chaîne vide n'est pas NULL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Pour le dire autrement, toutes les lignes de résultat retournées par la requête auront la même structure, que les colonnes nommées dans le SELECT contiennent qqe chose ou pas, voire NULL.
    Une ligne fait partie du résultat ou pas, mais, si elle en fait partie, elle possède les mêmes colonnes que toutes les autres lignes du résultat.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 208
    Par défaut
    CINEPHIL merci :-) ton premier code me donne le résultat voulu : seules les colonnes avec des lignes renseignées apparaissent donc. Ce ci en mettant bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WHERE col5 IS NOT NULL
      AND col5 <> ''
      AND col6 IS NOT NULL
      AND col6 <> ''
      AND col7 IS NOT NULL
      AND col7 <> ''
    à chaque fois...

    Par contre , je n'ai pas réussi à faire fonctionner ton deuxieme code. On le marque simplement comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT col1, col2, col3, 
      COALESCE(col5, '') AS col5,
      COALESCE(col6, '') AS col6,
      COALESCE(col7, '') AS col7
    ou avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT col1 FROM table COALESCE(col5, ")
    et sans WHERE ..?

    Merci

    Et pour résumer : vaut mieux demander à 1 qui sait , plutôt qu'à 100 qui cherchent...

    PS: MALJUNA KRIS désolé mais c'est tres flou pour moi débutant ton explication, celle de CINEPHIL est bien plus concise /
    ..en tout cas, je ne me souviens pas avoir vu cet exemple dans le résumé SQL de Developpez.com : dommage. En esperant que ce résultat serve d'autres personnes pour une requête multiples conditions ;-)

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par chanteur06 Voir le message
    CINEPHIL merci :-) ton premier code me donne le résultat voulu : seules les colonnes avec des lignes renseignées apparaissent donc.
    C'est plutôt les lignes avec les colonnes renseignées !

    Ce ci en mettant bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WHERE col5 IS NOT NULL
      AND col5 <> ''
      AND col6 IS NOT NULL
      AND col6 <> ''
      AND col7 IS NOT NULL
      AND col7 <> ''
    à chaque fois...
    Que veux-tu dire par "à chaque fois" ?

    Par contre , je n'ai pas réussi à faire fonctionner ton deuxieme code. On le marque simplement comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT col1, col2, col3, 
      COALESCE(col5, '') AS col5,
      COALESCE(col6, '') AS col6,
      COALESCE(col7, '') AS col7
    ou avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT col1 FROM table COALESCE(col5, ")
    et sans WHERE ..?
    Une requête SQL a au minimum la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT -- une ou des colonnes ou des expressions utilisant des colonnes
    FROM une-table
    Je ne t'ai donné que le début de la requête, la partie SELECT. Il manquait bien évidemment la partie FROM et éventuellement la restriction (partie WHERE) si tu as d'autres conditions de restrictions que le seul fait les colonnes soient ou pas renseignées.

    Mais relis bien mon message, les deux requêtes n'ont pas le même objectif.
    La première ne retournera que les lignes pour lesquelles les colonnes 5 à 7 ne seront ni NULL ni vides et la seconde retournera toutes les lignes mais remplacera l'affichage éventuel d'un NULL par une chaîne vide, c'est à dire que rien ne s'affichera dans ces colonnes NULL.

    À toi de voir quel est ton besoin réel.

    Pour apprendre le SQL, fais un tour chez SQLPro.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. SQL avec condition multiples sur une autre database
    Par mouton_noir dans le forum SAS Base
    Réponses: 1
    Dernier message: 04/02/2014, 23h04
  2. [SQL] Recherche à résultats multiples SQL - PHP
    Par Paradise01 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/08/2006, 14h52
  3. Calcul requête avec conditions multiples
    Par Phullbrick dans le forum Access
    Réponses: 7
    Dernier message: 18/04/2006, 13h45
  4. Calculs dans une requete avec conditions multiples
    Par Sha1966 dans le forum Access
    Réponses: 3
    Dernier message: 13/01/2006, 15h18
  5. Switch et conditions multiples
    Par The Wretched dans le forum Langage
    Réponses: 4
    Dernier message: 19/04/2005, 13h57

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