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

Langage SQL Discussion :

Choix structure tables


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut Choix structure tables
    Bonjour à tous, je souhaiterais votre avis sur une structure de bdd (juste un bout je vous rassure^^).

    Alors voilà je développe une application actuellement où des Magasins se logguent et ont accès à un tableau (GridView avec le requete SELECT en source);
    Chaque Magasin n'a d'affiché que les données de son magasin.

    Seulement il y a 3 groupes d'entité qui peuvent se loguer: un magasin, un admin et 3 personnes distinctes.

    Voici un récapitulatif des droits:

    -Magasin : accès donnée de son magasin
    -Admin: accès donnée de tous les magasins
    -Spécial (3 identifiants différents): accès aux données de leurs magasins respectifs (secteur).


    Voici mes tables:

    *************
    MAGASIN
    ---------
    -code_magasin
    -magasin
    -mdp

    SECTEURS
    ----------
    -personne1
    -personne2
    -personne3

    *************

    Mon problème est que je ne sais pas trop comment bien gérer le groupe spécial qui a accès spécifiquement à son secteur.

    Dans "SECTEURS" il y a les code_magasin de chaque personne;


    Comment faire et avec quelle requête je pourrais faire un SELECT qui afficherait les données des magasins correspondant à personne1/personne2/personne3 ?

    Merci d'avance, et en espérant m'être pas trop mal expliqué!

    Cordialement

  2. #2
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Ne peut-on pas faire quelque chose comme ça?

    SELECT champs1, champs2, champs3 FROM table1 WHERE champs1 = (SELECT colonne1 FROM table2); ??

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    Je ne saisi pas ta question:
    est ce que ton modèle est finalisé et tu as un problème dans tes requêtes ou bien tu cherche à avoir une conception de modèle :

    Si c'est le 2eme cas je peux te propser un
    début de conception:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    MAGASIN
    ---------
    idMag  magasin  mdp
    1
    2
    3
    4
    5
     
    Utilisateur
    IDUser   libelle
    1       ADMIN
    2       pers1
    3       pers2
    4       pers3
     
    User_Secteur
    IdUSer IDsect
    2	1
    3	2
     
    Secteurs
    IdSect  libelle
     
     
    Secteur_Magazin
    IDSECT   IDMag
    1	1
    1	2
    1	3
    2	4
    2	5

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    J'ai modifié ma table SECTEURS comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SECTEURS
    ----------
    chef_secteur | code_magasin
          1                     100
          1                      97
          2                      88
    Pour le reste je ne peux pas modifier, car il ya trop de dépendances et de choses existantes qui reposent dessus...


    Avec donc une archi comme ça:

    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
    19
     
    *************
    MAGASIN
    ---------
    -code_magasin
    -magasin
    -mdp
     
    SECTEURS
    ----------
    -chef_secteur
    -code_magasin
     
    FICHE_DONNEES_MAG
    ----------
    -numero
    -...
    -...
    -code_magasin
    Et je voudrais afficher les données de "FICHE_DONNEES_MAG" correspodant à un chef de secteur (donc à ses magasins).

    J'ai tenté ça, mais ça n'a pas marché:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT TOP 
    200 NUMERO, CODE_MAGASIN, NOM, [...]
    FROM FICHE_DONNEES_MAG
    WHERE CODE_MAGASIN = 
       (SELECT CODE_MAGASIN FROM SECTEURS WHERE SECTEURS = 'Personne1') 
    ORDER BY NUMERO DESC";

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 135
    Points : 164
    Points
    164
    Par défaut
    tu peux tenter ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT TOP 
    200 FICHE_DONNEES_MAG.*
    FROM FICHE_DONNEES_MAG INNER JOIN MAGAZIN 
    ON  FICHE_DONNEES_MAG.numero=MAGAZIN.CODE_MAGASIN 
    INNER JOIN SECTEURS 
    ON  MAGAZIN.CODE_MAGASIN =SECTEURS.CODE_MAGASIN
    Where chef_secteur=1
    ORDER BY FICHE_DONNEES_MAG.NUMERO DESC;

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    J'ai beau chercher, sur cette requete, je ne trouve pas ce qui ne marche pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT TOP 200 NUMERO, CODE_MAGASIN, [...] FROM FICHE_DONNEES_MAG WHERE CODE_MAGASIN IN (SELECT CODE_MAGASIN FROM SECTEURS WHERE CHEF_SECTEUR = 'Personne1') ORDER BY NUMERO DESC";
    Mais l'erreur affichée est "Incohérence de type dans une expression."

    Une idée de comment faire?

    Merci d'avance

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 24
    Points : 15
    Points
    15
    Par défaut
    Teach, mon héro... j'étais convaincu que la jointure ne marcherait pas... belle gourde!

    voilà la requête finale (je n'ai pas besoin d'utilisaer la table magasin, le code_magasin étant déjà dans la table Fiche_donnees_mag.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT TOP 200 fi.NUMERO, fi.CODE_MAGASIN, fi.[...] 
    FROM FICHE_DONNEES_MAG AS fi
    INNER JOIN SECTEURS 
    ON fi.CODE_MAGASIN = SECTEURS.CODE_MAGASIN 
    WHERE SECTEURS.CHEF_SECTEUR = 'Personne1'
    ORDER BY fi.NUMERO DESC";
    Merci beaucoup!

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/06/2007, 13h01
  2. [conception] structure table ou requete
    Par lyndalittle dans le forum Modélisation
    Réponses: 3
    Dernier message: 26/02/2007, 17h09
  3. choix de table pour gestion des stocks
    Par Piloupilou999 dans le forum Access
    Réponses: 1
    Dernier message: 28/01/2007, 21h49
  4. Conseil choix structure STL
    Par SteelBox dans le forum SL & STL
    Réponses: 3
    Dernier message: 15/03/2005, 03h13
  5. [vb6] Modifier structure table Access sous VB6
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 25/03/2004, 18h45

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