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 29/01/2011, 14h25   #1
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 116
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 116
Points : 33
Points : 33
Envoyer un message via MSN à spy74
Par défaut Forcer Distinct selection

bonjour,

j'ai un problème avec une requête sql se chargent de récupéré des objets qui son soumis à des lois de sécurité nommer ACL(valeur octal).
le bute est de sélectionner en même temps les objets et de savoir les droits de l'utilisateur courant.
cependant les ACL détermines les droits pour plusieurs groupes et dans le cas ou l'utilisateur courant appartient à 2 groupes (ou plus) dans le cas présent group1 & group2, ayant des acl différents cela génère un obj par acl (normal)

comprennont avec un exemple voici la requet ci-dessous
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
SELECT DISTINCT
	block.id_block,block.nom_block,block.ordre_visu_block,
        entite.id_entite,
        autorisergroup.id_groupe,autorisergroup.acl
FROM block
JOIN
  entite ON block.refentite_block = entite.id_entite
LEFT JOIN
  autorisergroup ON autorisergroup.id_entite = entite.id_entite
WHERE refpage_block = 1 AND(
      autorisergroup.id_groupe = 1 OR
      autorisergroup.id_groupe = 2 
      )
 
ORDER BY block.ordre_visu_block ASC, autorisergroup.acl ASC;
ce qui donne :
Code :
1
2
3
4
5
6
7
 
id_block | nom block | order_visy_block | id_entite | id_groupe | acl
10       ;  "block1" ;         1        ;    1    ;     1      ; 8
10       ;  "block1" ;         1        ;    1    ;     2      ;12
11       ;  "block2" ;         2        ;    1    ;     1      ;8
11       ;  "block2" ;         2        ;    1    ;     2      ;12
13       ;  "block3" ;         4        ;    2    ;     1      ;0
il faudrait que je selectionne la plus grand ACL de toutes celle qui on été lister par block pour avoir un résultat de ce genre ...
Code :
1
2
3
4
5
 
id_block | nom block | order_visy_block | id_entite | id_groupe | acl
10       ;  "block1" ;         1        ;    1    ;     2      ;12
11       ;  "block2" ;         2        ;    1    ;     2      ;12
13       ;  "block3" ;         4        ;    2    ;     1      ;0
cependant comme les lignes sont différents DISTINCT ne fonctionne pas, il faudrait un distinct qui s’applique à une colonne en particulier genre id_block.
es possible ?
spy74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2011, 16h43   #2
Nouveau Membre du Club
 
Inscription : juin 2008
Messages : 116
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 116
Points : 33
Points : 33
Envoyer un message via MSN à spy74
ça a été dure mais j'ai presque le bon résultat
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
SELECT DISTINCT
	block.id_block,block.nom_block,block.ordre_visu_block,
        entite.id_entite,
        autorisergroup.id_groupe,autorisergroup.acl
FROM block
JOIN
  entite ON block.refentite_block = entite.id_entite
LEFT JOIN
  autorisergroup ON autorisergroup.id_entite = entite.id_entite
WHERE refpage_block = 1 AND
autorisergroup.acl IN ( SELECT max(autorisergroup.acl) 
                        FROM autorisergroup 
			WHERE autorisergroup.id_entite = entite.id_entite AND (
				autorisergroup.id_groupe = 1 OR
				autorisergroup.id_groupe = 2 )
                        )
ORDER BY ordre_visu_block ASC;
spy74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h11.


 
 
 
 
Partenaires

Hébergement Web