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

PostgreSQL Discussion :

aide pour formuler une requete sql


Sujet :

PostgreSQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut aide pour formuler une requete sql
    Bonjour,

    Je sollicite votre aide pour une requête sql.

    J'ai une table photo avec les champs suivants :

    id_photo, id_membre,rang_photo

    Un membre peut avoir 3 photos qu'il peut placer en 1ère, 2ème ou 3 eme position sur sa page.

    Pour contrôler l'absence de bug dans le script php je souhaiterai vérifier qu'aucun membre ait plus d'une photo avec le même rang.

    Par exemple :

    id_photo = 1 id_membre = 2 rang_photo = 1
    id_photo = 2 id_membre =2 rang_photo = 1

    est interdit car deux photos d'un même membre ont le même rang.

    mais comment faire cette requête sql ?

    Merci de votre aide.

  2. #2
    Membre actif
    Inscrit en
    Février 2006
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 185
    Points : 224
    Points
    224
    Par défaut
    Salut,
    cette requête te donne les membres pour lesquels il existe un rang ou ils ont plus d'une photo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select  id_membre,rang_photo,count(*) 
    from rang 
    group by id_membre,rang_photo 
    having count(*)>1;

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    merci mais c'est pas ce que je veux...

    je veux connaitre les membres qui ont plusieurs photos au même rang...

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    La requête proposée par djlixfe fait ce que tu demandes : elle renvoit id du membre, le rang et le nombre de photo sur ce rang, quand il y a plus d'une photo sur le rang.
    Ca a tout l'air d'être ce que tu veux...
    A moins que tu veuilles l'id des photos en plus ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Ben dans la réalité elle ne me donne pas le résultat escompté...

    Je veux savoir combien de membres ont "deux photos au moins" sur le rang "1"

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 43
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par viny Voir le message
    Bonjour,

    est interdit car deux photos d'un même membre ont le même rang.

    mais comment faire cette requête sql ?

    Merci de votre aide.
    As-tu pensé à une contrainte unique sur (id_membre,rang_photo) ? Radical mais efficace!

    Citation Envoyé par viny Voir le message
    Je veux savoir combien de membres ont "deux photos au moins" sur le rang "1"
    Dans ces conditions, tu peux simplement compter les lignes retournées par la requête dedjlixfe en l'utilisant comme sous requête. Mais tu ne sauras pas quels sont les utilisateurs fautifs.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Non je n'y avais pas pensé ... effectivement une contrainte sur ces deux champs et l'affaire est classée... !

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    j'ai un pb de syntaxe pour ajouter ma contrainte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    ALTER TABLE "public"."media_inscrit"
      ADD CONSTRAINT "media_inscrit_chk" CHECK (UNIQUE media_inscrit_rang, media_inscrit_inscrit_id
    );
    Cela m'est refusé...

    merci

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 43
    Points : 73
    Points
    73
    Par défaut
    Le contrôle d'unicité n'est pas une contrainte de type 'CHECK' mais de de type 'UNIQUE'... Et on ne mélange pas les 2 non plus.

    2 possibilités pour effectuer ta vérification qui sous postgresql reviennent au même (postgresql créant un index unique implicite derrière chaque containte unique):
    * définir une contrainte UNIQUE sur la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE "public"."media_inscrit"
            ADD CONSTRAINT "media_inscrit_chk" 
            UNIQUE ("media_inscrit_rang", "media_inscrit_inscrit_id");
    * définir un index unique sur les champs concernés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CREATE UNIQUE INDEX "media_inscrit_chk_ui" 
            ON "public"."media_inscrit" ("media_inscrit_rang", "media_inscrit_inscrit_id");

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Je n'ai pas pu le faire car il me dit qu'il y a des valeurs dupliquées...et c'est normal car l'index ne va pas contrôler l'unicité du couple de colonnes mais l'unicité de chaque colonne. Or, c'est pas le cas dans ma table.

  11. #11
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2007
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 43
    Points : 73
    Points
    73
    Par défaut
    La table sur laquelle tu positionne une contrainte doit évidement répondre à cette contrainte au moment même où tu mets en place la vérification !

    La requête qui t'as été donnée précédemment te permettra d'identifier les enregistrement ne répondant pas à la contrainte et au besoin de les supprimer

    Défini tel qu'il l'est, l'index ou la contrainte vérifient l'unicité du couple et non pas colonne par colonne !

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    677
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 677
    Points : 160
    Points
    160
    Par défaut
    Mea culpa, j'ai fait une erreur dans la requête !!!! mille excuses ! la requête fonctionne très bien effectivement...et je vais ensuite faire ce que tu me dis merci à tous !

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

Discussions similaires

  1. Aide pour formuler une requete
    Par aymen007 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 16/04/2009, 18h38
  2. Aide pour formuler une requête sql
    Par viny dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/05/2008, 20h37
  3. demande d'aide pour comprendre une requete SQL
    Par Halloula dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/04/2008, 18h14
  4. aide pour créer une requete sql
    Par DonKnacki dans le forum Langage SQL
    Réponses: 11
    Dernier message: 07/02/2008, 18h17
  5. Aide pour optimiser une requete
    Par Akanath dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/09/2005, 11h05

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