Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/02/2008, 09h25   #1
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
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.
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 12h53   #2
Membre confirmé
 
Inscription : février 2006
Messages : 185
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 185
Points : 204
Points : 204
Salut,
cette requête te donne les membres pour lesquels il existe un rang ou ils ont plus d'une photo
Code :
1
2
3
4
SELECT  id_membre,rang_photo,count(*) 
FROM rang 
GROUP BY id_membre,rang_photo 
HAVING count(*)>1;
djlixfe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 10h37   #3
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
merci mais c'est pas ce que je veux...

je veux connaitre les membres qui ont plusieurs photos au même rang...
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 17h33   #4
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 413
Points : 6 413
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
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 18h02   #5
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
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"
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 10h57   #6
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 33
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 33
Points : 29
Points : 29
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.
j_f_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 11h08   #7
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Non je n'y avais pas pensé ... effectivement une contrainte sur ces deux champs et l'affaire est classée... !
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 11h20   #8
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
j'ai un pb de syntaxe pour ajouter ma contrainte :

Code :
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
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 11h50   #9
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 33
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 33
Points : 29
Points : 29
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 :
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 :
1
2
3
 
CREATE UNIQUE INDEX "media_inscrit_chk_ui" 
        ON "public"."media_inscrit" ("media_inscrit_rang", "media_inscrit_inscrit_id");
j_f_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 12h01   #10
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
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.
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 12h06   #11
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 33
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 33
Points : 29
Points : 29
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 !
j_f_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 12h20   #12
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
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 !
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h43.


 
 
 
 
Partenaires

Hébergement Web