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 :

Forcer Distinct selection


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 117
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 117
    Par défaut
    ça a été dure mais j'ai presque le bon résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

Discussions similaires

  1. forcer la selection d'un noeud dans un treeview
    Par boubou38 dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 02/11/2011, 13h24
  2. forcer la selection sur clic droit
    Par cannelline dans le forum Composants
    Réponses: 2
    Dernier message: 08/03/2011, 15h09
  3. Liste déroulante : forcer la selection de la ligne 1 ?
    Par youpitralala dans le forum IHM
    Réponses: 2
    Dernier message: 16/04/2010, 08h57
  4. Select distinct et order by
    Par arsgunner dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/06/2004, 11h17
  5. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 19h33

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