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 :

Probleme de logique dans une requete


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut Probleme de logique dans une requete
    Bonjour,

    J'ai un probleme sur une requet, je ne comprend pas...

    J'ai 2 tables :
    User (user_id, user_nom, user_prenom)
    Module (module_id, user_id, module_right)

    Je souhaite obtenir les noms, prenoms, user_id de ts les utilisateurs ayant un droit d'admin ou d'ecriture.

    Pour cela, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select module.user_id, user.user_nom, user.user_prenom, module.module_id
    from user, module
    where  module.user_id = user.user_id
    and module.module_right = 'writer' or module.module_right = 'admin'
    order user_nom
    Je pensais obtenir la liste des personnes ayant un droit correspondant, avec leur id, leur nom et leur prenom.


    J'obtiens une liste avec les noms et les prenoms des personnes, mais elle figurent toutes 2 fois:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    |-----------------------------------
    | User_id | User_nom | User_prenom | 
    ------------------------------------
    |    42   |  Dupont  | Pierre      |
    |     5   |  Dupont  |Pierre       |
    |    42   |  Durand  | Paul        |
    |     5   |  Durand  |Paul         |
    |    42   |  Paul    |  Jacques    |
    |     5   |  Paul    |Jacques      |
    ------------------------------------
    Et dans la table module, 2 personnes ont des droits admin, avec les id_user = 5 et 42...

    Est ce que quelqu'un voit ou je fais erreur?

    Merci

  2. #2
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut
    Et avec un SELECT DISTINCT ?

    [edit]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select distinct module.user_id, user.user_nom, user.user_prenom, module.module_id
    from user, module
    where  module.user_id = user.user_id
    and module.module_right = 'writer' or module.module_right = 'admin'
    order user_nom
    [/edit]
    Merci d'éviter les UP et autres messages inutiles!
    Modérateur Informatique Générale (même si je me mets au Delphi)
    N'oubliez pas les règles!
    Mon adresse e-mail

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    J'y ai pensé, mais non, toujours la meme chose...

    Ce qui est logique apres reflexion, puisque chaque ligne est bien differente

  4. #4
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut Re: Probleme de logique dans une requete
    Et ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select user.user_nom, user.user_prenom, user.user_id
    from user, module
    where  module.user_id = user.user_id
    and module.module_right = 'writer' or module.module_right = 'admin'
    order user_nom
    La liste des users (nom, prenom et id) ayant les droits voulus...
    Merci d'éviter les UP et autres messages inutiles!
    Modérateur Informatique Générale (même si je me mets au Delphi)
    N'oubliez pas les règles!
    Mon adresse e-mail

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    Effectivement, les lignes sont maintenant correctes, mais sont toutes en double.

    J'ai donc mis un distinct en plus.

    Je comprend pas ce que ca change de mettre user.user_id ou module.user_id. Pour moi, ce sont les memes champs?...

    Et pourquoi toutes les lignes apparaissent en double?

  6. #6
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut
    Citation Envoyé par linou
    Je comprend pas ce que ca change de mettre user.user_id ou module.user_id. Pour moi, ce sont les memes champs?...
    Pas tout a fait.. En fait, module.user_id est la clé étrangère de user.user_id (qui elle, est la clé primaire).
    user.user_id est la référence pour module.user_id
    Merci d'éviter les UP et autres messages inutiles!
    Modérateur Informatique Générale (même si je me mets au Delphi)
    N'oubliez pas les règles!
    Mon adresse e-mail

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    Je suis d'accord avec toi, quand je dis que ce sont les memes champs, je sous entends qu'ils contiennent des valeurs identiques.

    Ca marche, c'est bien, mais j'ai pas compris pourquoi, ca membete...

    Je mets le post 'résolu' quand meme

  8. #8
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 338
    Points
    338
    Par défaut
    Je dois dire que je ne vois pas trop pourquoi moi non plus... Etudions la chose.

    Dans notre cas, nous faisons un produit cartésien des données. Peut-être que les conditions de vérification sur le produits donnent plusieurs fois le même résultat? Sans savoir ce qu'il y a dans les tables, c'est dûr de deviner
    Merci d'éviter les UP et autres messages inutiles!
    Modérateur Informatique Générale (même si je me mets au Delphi)
    N'oubliez pas les règles!
    Mon adresse e-mail

  9. #9
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    Vu qu'il existe dans la table module 2 lignes pour chaque utilisateur c'est normal que l'on en ramène 2 dans la requête.

    Ce que je ne comprends pas c'est que Pierre Dupont ait deux id dans la table user et que Paul Durand en ait deux mais en plus les même que Pierre Dupont (problème de données dans la table user ?)

    Par contre on peut faire cela (aux problème d'id prêt dans la table user):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select user.user_id, user.user_nom, user.user_prenom
    from user
    where  user.user_id  in
      (select module.user_id
      from  module 
      where module.module_right = 'writer' or module.module_right = 'admin' 
    )
    order user_nom
    On peut mettre un distinct ou un group by dans la sous-requête mais ça ne change rien au résultat de la requête principale puisqu'il trouve que l'occurence est vrai au premier module.user_id trouvé.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par phili_b
    Ce que je ne comprends pas c'est que Pierre Dupont ait deux id dans la table user et que Paul Durand en ait deux mais en plus les même que Pierre Dupont (problème de données dans la table user ?)
    Le tableau que j'ai mis n'est pas la table User, mais le resultat de ma requete. Sinon, ca voudait dire qui y ait un gros probleme d'integrite dans ma base.

    Citation Envoyé par Cerberes
    Sans savoir ce qu'il y a dans les tables, c'est dûr de deviner
    Je comprend bien, c'est pas evident quand on a pas les données sous les yeux!
    J'ai tout repris sur papier, en representant les tables et les données, mais je ne comprend toujours pas pourquoi. Pour chaque personne, j'ai bien qu'un seul user.user_id et qu'un seul module.user_id.


    Bref, la question restera en suspens... Une intrigue du SQL!

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 171
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par phili_b
    Ce que je ne comprends pas c'est que Pierre Dupont ait deux id dans la table user et que Paul Durand en ait deux mais en plus les même que Pierre Dupont (problème de données dans la table user ?)
    Le tableau que j'ai mis n'est pas la table User, mais le resultat de ma requete. Sinon, ca voudait dire qui y ait un gros probleme d'integrite dans ma base.

    Citation Envoyé par Cerberes
    Sans savoir ce qu'il y a dans les tables, c'est dûr de deviner
    Je comprend bien, c'est pas evident quand on a pas les données sous les yeux!
    J'ai tout repris sur papier, en representant les tables et les données, mais je ne comprend toujours pas pourquoi. Pour chaque personne, j'ai bien qu'un seul user.user_id et qu'un seul module.user_id.


    Bref, la question restera en suspens... Une intrigue du SQL!

  12. #12
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut Re: Probleme de logique dans une requete
    Et en essayant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select module.user_id, user.user_nom, user.user_prenom, module.module_id
    from user, module
    where  module.user_id = user.user_id
    and (module.module_right = 'writer' or module.module_right = 'admin')
    order user_nom
    Avec les () autour du or !
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

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

Discussions similaires

  1. Probleme de concatenation dans une requete
    Par toddy_101 dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/01/2007, 14h43
  2. [Access] Probleme de count dans une requete sql
    Par castelligreg dans le forum Langage SQL
    Réponses: 6
    Dernier message: 14/04/2006, 16h20
  3. [sql]Probleme de count dans une requete sql (sous access)
    Par castelligreg dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/04/2006, 16h06
  4. [MySQL] probleme de syntaxe dans une requete sql
    Par jeanfrancois dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/03/2006, 10h54
  5. [JDBC]problème de syntaxe dans une requête en java...
    Par chti_juanito dans le forum JDBC
    Réponses: 60
    Dernier message: 04/11/2005, 16h47

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