1. #1
    Membre à l'essai
    Homme Profil pro
    Support interfaçage
    Inscrit en
    juin 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2017
    Messages : 40
    Points : 21
    Points
    21

    Par défaut Requête avec un compteur

    Bonjour à tous, j'ai la requête suivante. Normalement, aucune ligne ne doit ressortir, mais si j'ai au moins deux directory.alais de différents, je voudrait le savoir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select    p.productionid as 'numero de prod',concat(pa.nom,' ',pa.prenom) as 'Nom prenom',p.annule as 'annule',p.inactif as 'inactif',e.nom as 'nom etablissement',m.CODE1,m.code2,m.nom,directory.alias
              from production p inner join patient pa on pa.cdo_id=p.cdo_container
              inner join posologietraitement pt on pt.cdo_container=pa.cdo_id
              inner join medicament m on m.cdo_id=pt.medicament
              inner join metadata me on me.cdo_container=pa.cdo_id
              inner join directory on me.value=concat('Directory:',directory.cdo_id)
              left join etablissement e on pa.etablissement=e.cdo_id
              where bondelivraison=(select max(bondelivraison) from production) ;
              and (p.inactif = 1 OR p.annule = 1 OR pa.etablissement IS NULL OR pa.etablissement ='' OR m.CODE1 IS NULL OR m.CODE1 = '' OR m.CODE2 IS NULL OR m.CODE2 = '' Or m.nom = '' ) ;
    /
    Je souhaiterai dans ma dernière ligne que s'il y a au moins deux me.value différente, de ressortir au moiins une ligne avec la première me.value puis au moins une ligne avec la seconde value ( il n'est pas impossible qu'il y ai 3 ou 4, ou plusieurs de valeurs différentes, donc ressortir autant de ligne )

    mal écrit ça donnerai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select    p.productionid as 'numero de prod',concat(pa.nom,' ',pa.prenom) as 'Nom prenom',p.annule as 'annule',p.inactif as 'inactif',e.nom as 'nom etablissement',m.CODE1,m.code2,m.nom,directory.alias
              from production p inner join patient pa on pa.cdo_id=p.cdo_container
              inner join posologietraitement pt on pt.cdo_container=pa.cdo_id
              inner join medicament m on m.cdo_id=pt.medicament
              inner join metadata me on me.cdo_container=pa.cdo_id
              inner join directory on me.value=concat('Directory:',directory.cdo_id)
              left join etablissement e on pa.etablissement=e.cdo_id
              where bondelivraison=(select max(bondelivraison) from production) ;
              and (p.inactif = 1 OR p.annule = 1 OR pa.etablissement IS NULL OR pa.etablissement ='' OR m.CODE1 IS NULL OR m.CODE1 = '' OR m.CODE2 IS NULL OR m.CODE2 = '' Or m.nom = '' 
              OR count(me.value) >1) ;
    Si quelqu'un peut m'aider.... d'avance merci à tous

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    15 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    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 : 15 633
    Points : 30 818
    Points
    30 818
    Billets dans le blog
    4

    Par défaut

    Pas le temps maintenant de regarder en détail mais il y a quand même un petit problème avec le WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    where bondelivraison=(select max(bondelivraison) from production) ;
              and (p.inactif = 1 OR p.annule = 1 OR pa.etablissement IS NULL OR pa.etablissement ='' OR m.CODE1 IS NULL OR m.CODE1 = '' OR m.CODE2 IS NULL OR m.CODE2 = '' Or m.nom = '' ) ;
    La dernière ligne ne sera pas prise en compte et MySQL retournera une erreur à l'exécution à cause de la dernière ligne qui n'est pas une nouvelle requête.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 à l'essai
    Homme Profil pro
    Support interfaçage
    Inscrit en
    juin 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2017
    Messages : 40
    Points : 21
    Points
    21

    Par défaut

    Désolé, le ';' n'a effectivement pas lieu d'être . il n'y est pas au final, c'était pour découper la requete avec juste le where select, puis les 'or....'....mais l'incident ne vient pas de là malheureusement

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    15 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    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 : 15 633
    Points : 30 818
    Points
    30 818
    Billets dans le blog
    4

    Par défaut

    Normalement, aucune ligne ne doit ressortir
    Voulez-vous dire que le requête doit avoir pour résultat zéro ligne ?

    J'ai du mal à comprendre votre besoin.
    Quoi qu'il en soit, si vous voulez un COUNT en plus, il vous faut un GROUP BY contenant toutes les colonnes du SELECT mais pas sûr que ça réponde à votre besoin.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Support interfaçage
    Inscrit en
    juin 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2017
    Messages : 40
    Points : 21
    Points
    21

    Par défaut

    Je vais essaye de mieux m'exprimer :

    1-je fais mes jointures.
    2- je met mes conditions simples :
    --> soit une production est inactif à 1 et je veux l'avoir ( cela est fonctionne )
    -->soit une production est annule à 1 et je veux l'avoir ( cela est fonctionne )
    -->soit un établissement n'a pas de nom ou est à null et je veux l'avoir ( cela est fonctionne )
    -->soit un code1,un code2 ou un nom est à null ou '' et je veux l'avoir ( cela est fonctionne )


    Condition que je ne sais écrire --> si je fais cette requête et qu'il y a plus d'un résultat, donc au moins deux 'value' à valeur différente,sortir une p.production de chaque value différente.

    cette requête séparée fonctionne mais je ne sais l'inclure dans la première :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select distinct(value) from metadata me
      inner join production pr on me.cdo_container=pr.cdo_container
      inner join directory on me.value= concat('Directory:',directory.cdo_id)
      where bondelivraison=(select max(bondelivraison) from production) ;
    Quand il n'y a pas de problème, ce select me renvoie un seul résultat donc je n'en ai pas besoin ; soit il y a au moins deux résultats et je voudrais les voir.

    J'espère avoir été plus clair dans mon explication... j'aimerai avoir cela mais la syntaxe ne semble pas correcte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select    p.productionid as 'numero de prod',concat(pa.nom,' ',pa.prenom) as 'Nom prenom',p.annule as 'annule',p.inactif as 'inactif',e.nom as 'nom etablissement',m.CODE1,m.code2,m.nom,directory.alias
              from production p inner join patient pa on pa.cdo_id=p.cdo_container
              inner join posologietraitement pt on pt.cdo_container=pa.cdo_id
              inner join medicament m on m.cdo_id=pt.medicament
              inner join metadata me on me.cdo_container=pa.cdo_id
              inner join directory on me.value=concat('Directory:',directory.cdo_id)
              left join etablissement e on pa.etablissement=e.cdo_id
              where bondelivraison=(select max(bondelivraison) from production) ;
              and (p.inactif = 1 OR p.annule = 1 OR pa.etablissement IS NULL OR pa.etablissement ='' OR m.CODE1 IS NULL OR m.CODE1 = '' OR m.CODE2 IS NULL OR m.CODE2 = '' Or m.nom = '' 
              OR count( select distinct(value) from metadata me
      inner join production pr on me.cdo_container=pr.cdo_container
      inner join directory on me.value= concat('Directory:',directory.cdo_id)
      where bondelivraison=(select max(bondelivraison) from production) )>1) ;

  6. #6
    Membre à l'essai
    Homme Profil pro
    Support interfaçage
    Inscrit en
    juin 2017
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Support interfaçage
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2017
    Messages : 40
    Points : 21
    Points
    21

    Par défaut

    J'ai réussi avec l'aide un collègue, en passant par un union.....

    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
    (select    p.productionid as 'numero de prod',concat(pa.nom,' ',pa.prenom) as 'Nom prenom',p.annule as 'annule',p.inactif as 'inactif',e.nom as 'nom etablissement',m.CODE1,m.code2,m.nom,directory.alias
              from production p inner join patient pa on pa.cdo_id=p.cdo_container
              inner join posologietraitement pt on pt.cdo_container=pa.cdo_id
              inner join medicament m on m.cdo_id=pt.medicament
              inner join metadata me on me.cdo_container=pa.cdo_id
              inner join directory on me.value=concat('Directory:',directory.cdo_id)
              left join etablissement e on pa.etablissement=e.cdo_id
              where bondelivraison=(select max(bondelivraison) from production)
              and (p.inactif = 1 OR p.annule = 1 OR pa.etablissement IS NULL OR pa.etablissement ='' OR m.CODE1 IS NULL OR m.CODE1 = '' OR m.CODE2 IS NULL OR m.CODE2 = '' Or m.nom = ''))
    union
    (select   directory.alias as'directory en erreur','','','','','','','',''
              from production p inner join patient pa on pa.cdo_id=p.cdo_container
              inner join posologietraitement pt on pt.cdo_container=pa.cdo_id
              inner join medicament m on m.cdo_id=pt.medicament
              inner join metadata me on me.cdo_container=pa.cdo_id
              inner join directory on me.value=concat('Directory:',directory.cdo_id)
              left join etablissement e on pa.etablissement=e.cdo_id
              where bondelivraison=(select max(bondelivraison) from production)
              group by me.value) ;
    Merci en tout cas pour votre aide

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

Discussions similaires

  1. Requête avec compteur (Imbriqué ?)
    Par Timkeeper dans le forum Langage SQL
    Réponses: 8
    Dernier message: 10/03/2015, 11h49
  2. Requête deux tables avec "variable compteur"
    Par jeanbob2 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 06/03/2013, 18h39
  3. Requête avec l'expression Like
    Par Mvu dans le forum ASP
    Réponses: 3
    Dernier message: 02/09/2003, 09h39
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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