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 02/04/2008, 17h08   #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 requete sql

Bonjour,

Je sollicite votre aide pour une requete sql ou plpgsl qui me pose problème.

Voilà j'ai une table "photo" avec les champs suivants :

id_photo, id_membre, rang_photo, photo_valide

Chaque membre peut avoir 5 photos maxi. Ces photos doivent être validées avant d'apparaitre sur le site.

Dans mon module d'administration des photos je valide les photos dont le champ photo_valide = 'NO'.

jusque là c'est très simple comme requête...

Code :
SELECT id_photo, id_membre WHERE photo_valide = 'NO'
Avec cette requête toutes les photos non validées d'un membre risquent d'apparaitre en même temps sur la même page et c'est ce que je ne veux pas.

je veux valider pour chaque membre une photo à la fois .

exemple

membre 1 : 3 photos
membre 2 : 2 photos
membre 3 : 1 photos

je veux que la première requête affiche :

1 photo de chaque membre


J'espère être clair...

Cordialement
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 09h23   #2
Invité régulier
 
Inscription : février 2005
Messages : 12
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12
Points : 6
Points : 6
Bonjour,

Je ne suis pas super pro mais je pense que tu devrais regarder comment fonctionnent les "cursors", puis ensuite voir des fonctions comme FETCH. ( http://www.postgresql.org/docs/8.2/i...l-cursors.html )

Al
alexis_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 09h45   #3
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Oui mais je pense pas que la solution soit là elle se trouve à mon avis dans l'écriture de la requête sql...

merci
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 14h13   #4
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
bonjour,
pour ton exemple
Citation:
exemple

membre 1 : 3 photos
membre 2 : 2 photos
membre 3 : 1 photos
Approximativement
Code :
1
2
 
SELECT  id_membre,count(id_photo) WHERE photo_valide = 'NO' GROUP BY id_membre;
Enfin si j'ai bien compris.
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 14h44   #5
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
merci mais ça ne fonctionne pas...
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 16h41   #6
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 40
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 40
Points : 33
Points : 33
J'ai un début de solution :

select id_photo, id_membre
from table
where photo_valide = 'no'
and rang_photo = (select min(rang_photo) from test where photo_valide = 'no');

ça va te donner toutes les photo dont le rang est le plus petit ET dont la photo n'est pas valide. Donc, si tu as une seule photo de rang 1 qui n'est pas valide, cette requete ne te retournera qu'une seule ligne... Une fois que cette photo est passée valide, cette requete te retournera les photo non valide de rang 2+ ...
AlexC3301 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 17h36   #7
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Citation:
Envoyé par AlexC3301 Voir le message
J'ai un début de solution :

select id_photo, id_membre
from table
where photo_valide = 'no'
and rang_photo = (select min(rang_photo) from test where photo_valide = 'no');

ça va te donner toutes les photo dont le rang est le plus petit ET dont la photo n'est pas valide. Donc, si tu as une seule photo de rang 1 qui n'est pas valide, cette requete ne te retournera qu'une seule ligne... Une fois que cette photo est passée valide, cette requete te retournera les photo non valide de rang 2+ ...
Pourquoi se compliquer la vie, autant utiliser le mot clé LIMIT

Code :
1
2
3
SELECT id_photo, id_membre 
FROM TABLE
WHERE photo_valide = 'no' LIMIT 1
Ce code va te renvoyer une seule photo à la fois. Donc quand elle seront toutes validées la requête ne renverra aucun resultat.

Un peu d'aide sur la FAQ
http://postgresql.developpez.com/faq...t#nfirstlignes

Sinon viny pour la solution que je t'ai proposée, qu'est ce qui ne marche pas? Donne nous plus de détails.
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 17h41   #8
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
Oui mais le but n'est pas de valider une photo à la fois ! voir problématique plus haut !
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 18h01   #9
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Je t'ai aussi demandé ce qui ne fonctionne pas dans la requête que je t'ai donnée. Voir mon message précédent!
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 18h12   #10
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
la seule solution qui fonctionne pour le moment est celle de AlexC3301

quant à la tienne elle me renvoie tjs plusieurs photos du même membre.
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 18h21   #11
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Ca m'étonne.
Tu peux me faire un copier coller exact des requêtes que tu utilise ainsi que les résultats ?
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2008, 19h13   #12
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
non ça c pas possible...
viny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2008, 12h27   #13
Membre habitué
 
Inscription : mai 2002
Messages : 635
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 635
Points : 109
Points : 109
merci AlexC3301 !
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 08h22.


 
 
 
 
Partenaires

Hébergement Web