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 :

comment faire un where seulement si une valeur existe ?


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Par défaut comment faire un where seulement si une valeur existe ?
    Bonjour,

    Je fais un simple requête, grâce à Antoun :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT t1.nom, t2.droit, t3.fichier, t3.ordre
    FROM t1
      LEFT JOIN t2 ON t1.id = t2.id
      LEFT JOIN t3 ON t1.id = t3.id
    WHERE t1.date BETWEEN...
    LIMIT 0,50
    Mais j'ai un problème que je n'ai pas réussi à résoudre sans faire, je pense, de redondance.

    J'ai t1 --- 1,1 ---> t2 --- 1,n ---> t3

    On a donc plusieurs fichiers affectés à chaque nom. Mais, plus exactement 0, 1 ou plusieurs !

    Or, je souhaite récupérer le nom (t1), les droits de cette personne (t2) et le premier fichier (celui pour lequel ordre = 1).
    Avec un WHERE t3.ordre = 1, pas de soucis... sauf quand il n'y a pas de fichier. Car dans ce cas, il ne renvoie rien du tout.

    Donc est-ce possible d'avoir ce résultat en une seule requête ?

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    Il faut passer ta condition d'ordre dans le prédicat de jointure (le ON quoi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT t1.nom, t2.droit, t3.fichier, t3.ordre
    FROM t1
      LEFT JOIN t2 ON t1.id = t2.id
      LEFT JOIN t3 ON t1.id = t3.id AND t3.ordre = 1
    WHERE t1.date BETWEEN...
    LIMIT 0,50

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Par défaut
    On dirait même que ça marche !

    MERCI ! ça m'évite un select qui, je le sentais bien, était là pour rien.

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

Discussions similaires

  1. Comment faire déconnecter les utilisateurs d'une base
    Par ENIT-Info dans le forum Access
    Réponses: 23
    Dernier message: 28/02/2017, 14h57
  2. Réponses: 5
    Dernier message: 11/10/2010, 09h16
  3. [JAXB]Comment faire apparaitre dans le xsd une valeur par défaut pour un attribut
    Par Marcos Ickx dans le forum Persistance des données
    Réponses: 0
    Dernier message: 07/01/2010, 18h38
  4. Réponses: 3
    Dernier message: 19/06/2007, 22h34
  5. Réponses: 1
    Dernier message: 03/02/2006, 12h35

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