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

Langage SQL Discussion :

Requête sur enum


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut Requête sur enum
    Bonsoir,

    Je travail avec une base de données SQL.
    présentation du problème:
    une personne est liée a une table membre
    une personne doit obligatoirement être membre..
    La table membre est liées a une table photo par sa clée primaire.. chaque personne peux avoir différent type de photo
    chaque image est d'un seul type et une personne peux avoir plusieur photo
    Mon enum viens différencier ces photos. ex: photo de profil, photo de face,...

    voila ma requete qui renvoie tout les memebre et leur photo de profil:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select a.personne, d.image_type
       from 
         personne as ps 
            join membre as mb on mb.membre_id = ps.personne_fk
    	join image as im on im.image_fk = mb.membre_id
         group by ps.personne_id,im.image_type;
    Je voudrait avoir seulement les membres et du coup les personnes qui ont une seule photo de profil et pas les autres.

    UPDATE: je pourrais aussi faire une requête pour connaitre le nombre de photo par membre et ainsi recupérer seulement ceux avec une photo..

    j'espère que c'est assez clair

    merci.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    S'il s'agit de ne ressortir que les personnes qui n'ont qu'une seule photo pour un type donné, il suffit d'ajouter HAVING COUNT(*) = 1 à la requête, en ajoutant éventuellement une restriction (WHERE) sur le type de photo.

  3. #3
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut [Having count(*)] retourne tout les membres
    Merci pour ta réaction..

    cette requete me renvoie même les membres qui ont une photo de profils ou plus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select ps.personne, im.image_type
       from 
         personne as ps 
            join membre as mb on mb.membre_id = ps.personne_membre_fk
    	join image as im on im.image_membre_fk = mb.membre_id
         group by ps.personne_id,im.image_type having count(*) = 1;
    j'attend que ma requête me renvoie seulement les membres avec une photo de profil...

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Une petite question : est-ce que a.personne et ps.personne_id sont bien la même entité ?
    D'ailleurs, d'où sortent les alias de table a et d qui n'apparaissent pas dans la requête ? Cette requête s'exécute-t-elle sans erreur ?
    Il est difficile d'aider à la mise au point d'une requête si celle qui est présentée n'est pas celle qui est exécutée

  5. #5
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut Correction effectué
    une erreur de ma part, c'est corriger..

    Effectivement ce n'est pas la requete que j'execute.

    j'ai bien ma table image qui contient des enuméré pour le type d'image

    chaque image a son id auto-incrémenté dans la table image

    les personne on par contre le meme id membre dans la table personne

    et les le même id membre dans la table image

    ma requete originale s'execute sans erreur
    et la requete dans le post est tout a fait symetrique

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Citation Envoyé par sinzen Voir le message
    cette requete me renvoie même les membres qui ont une photo de profils ou plus:
    La requête retourne des membres qui ont plusieurs images de même type ?
    Ou plusieurs images de type différent ?

  7. #7
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut [mauvaise formulation de la requete]
    Je pense que j'ai mal formulé ma requete

    ma requete renvoie une ligne par id membre pour chaque type d'image.. Même si j'ai deux images de même type pour un membre j'ai une ligne pour chaque.
    forcement le having count ne fonctionne pas il ya une image par ligne..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select ps.personne, im.image_type
       from 
         personne as ps 
            join membre as mb on mb.membre_id = ps.personne_membre_fk
    	join image as im on im.image_membre_fk = mb.membre_id
         group by ps.personne_id,im.image_type having count(*) = 1;
    avec cette requete je renvoie uniquement les membres avec un type de photo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select mb.membre_id, count(*)
       from 
         personne as ps 
            join membre as mb on mb.membre_id = ps.personne_membre_fk
    	join image as im on im.image_membre_fk = mb.membre_id
         group by mb.membre_id having count(*) = 1;

  8. #8
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut souci clause where
    pour la dernière requete je recupere bien les membres avec une seul image quelque soit le type

    mais j'ai quand même un souci: je voudrait ajouter une clause pour afficher le type d'image

    normalement je doit avoir une nombre inferieur au nombre precedents d'entré mais j'en ai plus

    voici ce que je fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select ps.personne_id, mb.membre_id
       from 
         personne as ps 
            join membre as mb on mb.membre_id = ps.personne_membre_fk
    	join image as im on im.image_membre_fk = mb.membre_id
         where im.image_type = 'profil'
         group by mb.membre_id,ps.personne_id having count(*) = 1;
    je reformule :

    • je voudrait avoir tous les membres avec au maximum une photo de n'importe quel type


    • je voudrait recuperer tout les membres avec au maximum un image de profil et pour un type donné


    je peux travailler dans ma table image
    car j'ai mon id membre du coup je fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select im.membre_fk 
         from
    	image as im
    	    where im.image_type = 'profil'
    	group by im.membre_fk having count(*) = 1;
    mais ca me retourne toute les membres avec le meme type d'image meme dans le cas ou un membre a + de un type d'image

    par contre cette requete renvoie bien les membre avec un seul type d'image tout type confondus..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select im.membre_fk 
    from 
        image as im
          group by
               im.membre_fk having count(*) = 1;

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par sinzen Voir le message
    mais ca me retourne toute les membres avec le meme type d'image meme dans le cas ou un membre a + de un type d'image
    Ça vous renvoie tous les membres qui n'ont qu'une photo de profil, indépendamment des autres type de photos qu'ils peuvent avoir par ailleurs :
    Essayez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select im.membre_fk 
      from image as im
     group by im.membre_fk 
    having count(*) = 1
       and sum(case when im.image_type = 'profil' then 1 end) = 1;

  10. #10
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut [resultat non concluant]
    Merci pour ta reaction skutamad..

    mais la requête retourne toujours les autre profils

    j'ai teste avec ta fonction mais non concluant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select im.membre_fk 
    from 
        image as im
          group by
               im.membre_fk 
         having count(*) = 1
       and sum(case when im.image_type = 'profil' then 1 end) = 1;
    et par la même cela, même chose non conlcuant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select im.membre_fk 
    from 
        image as im
          group by
               im.membre_fk 
        having 
         sum(if(`image_type`= 'profil', 1, 0)) = 1 and
         sum(if(`image_type`= 'deface', 1, 0)) = 0;
    comme suite dans ma table image j'ai deux type d'image en enuméré : deface , profil

    ces deux requete renvoir toujours les membres avec plusieurs photo de profil et pas
    les membres avec seulement une photo de type "profil"

    merci

  11. #11
    Membre régulier
    Homme Profil pro
    Symfony - CMS Wordpress - Zend
    Inscrit en
    Septembre 2011
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Symfony - CMS Wordpress - Zend
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 306
    Points : 101
    Points
    101
    Par défaut Fonctionnel..
    Merci skuatamad

    j'ai tester sur une base saine et cela fonctionne

    je doit revoir l'intégrité de mes tables du coup..

    merci

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

Discussions similaires

  1. [ADO] Requète sur dates
    Par cdlr27 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/01/2005, 22h39
  2. Requête sur un MemData
    Par claude dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/12/2004, 10h11
  3. Requête sur date
    Par guenfood dans le forum Access
    Réponses: 11
    Dernier message: 08/12/2004, 16h11
  4. Requête sur un serveur lié
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/08/2003, 11h35
  5. requête sur l'année d'une date
    Par jo77 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/07/2003, 09h28

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