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 :

Problème de tri avec une relation de type n-n


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 38
    Points
    38
    Par défaut Problème de tri avec une relation de type n-n
    Bonjour,
    Voilà mon schéma de BD

    J'ai des entités (ex une Personne) associées à une ou plusieurs valeurs (ex Basket) qui elles même apartiennent à des critères (ex Loisirs). Il ne peux y avoir qu'une valeur par critère.
    Par exemple :

    André associé à Foot (critère Loisir) et Chien (critère Animaux)
    Pascal associé à Gym, et Chat
    ...

    Afin de faire mes recherches en BD, j'utilise la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select entite_identite from valeur_entite
    where valeur_idvaleur in (liste des mes id valeur)
    group by entite_identite
    having count(distinct valeur_idvaleur) = nb de valeur
    Ca fonctionne correctement et me renvoie bien les id que je souhaite.
    Le problème c'est que maintenant j'aimerais bien pouvoir effectuer des tris sur les valeurs d'un identifiant de critère donné, avec par exemple trier mes id retournés selon le critère Animaux ou bien Loisirs.
    Ainsi, si je trie mes résultats selon le critère Animaux dans l'ordre alphabétique, Pascal apparaitra en premier (Chat < Chien)
    Je ne sais pas comment m'y prendre.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Voilà une requête possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select e.nom
    from entite e 
    inner join valeur_entite ve on e.identite = ve.entite_identite
    inner join valeur v on ve.valeur_idvaleur = v.idvaleur
    inner join critere c on c.idcritere = v.critere_idcritere
    order by v.nom
    J'ai rajouté une colonne "nom" dans la table "valeur" pour y faire figurer 'chat', 'chien', 'foot'... et c'est sur cette colonne que s'effectue le tri, mais on peut aussi le faire sur idvaleur en cas de nécessité.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 38
    Points
    38
    Par défaut
    Oui effectivement, j'ai oublié une colonne nom!
    Mais mon problème c'est que je dois trier toutes mes entités selon la valeur d'un critère particulier et pas TOUS les critères!
    Donc un tri selon les nom de valeurs d'un idcritere seulement...
    Comment puis-je faire?

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Citation Envoyé par toutoune60
    Mais mon problème c'est que je dois trier toutes mes entités selon la valeur d'un critère particulier et pas TOUS les critères!
    Là, il faut peut-être préciser par un exemple, parce que je vois pas trop

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 74
    Points : 38
    Points
    38
    Par défaut
    Oui, c'est pas évident à expliquer !

    On reprend :

    André associé à Foot (critère Loisir, id 4) et Chien (critère Animaux, id 5)
    Pascal associé à Gym, et Chat
    René associé à Basket, et Hamster

    Imaginons que je souhaite retourner les id de mes entités, triées par ordre de Loisir ascendant. Mon tri doit alors ne s'effectuer que selon les valeurs dont l'id et 4 et pas les autres (peu importe pour les autres).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Je devrais alors avoir : René, André, Pascal (Basket<Foot<Gym)
    Avec un ORDER BY v.nom, j'aurais un tri sur toutes les valeurs, quelle que soit l'id critère parent (4 et 5 dans l'exemple)
    Là j'aurais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    René, Pascal, André (Basket<Chat<Chien)

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bon, si j'ai bien compris , voilà ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT e.nom, v.nom, v.idvaleur
    FROM entite e
    INNER JOIN valeur_entite ve ON e.identite = ve.entite_identite
    INNER JOIN valeur v ON ve.valeur_idvaleur = v.idvaleur
    INNER JOIN critere c ON c.idcritere = v.critere_idcritere
    ORDER BY c.idcritere, v.nom
    Ca trie d'abord par idcritère (tous les 4 = loisirs, puis tous les 5 = animaux).
    Si tu ne veux qu'un critère, tu le spécifies dans la clause where (ne ramener que les loisirs)

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. Réponses: 30
    Dernier message: 17/05/2011, 12h25
  2. Problème pour requeter avec une relation manyToMany
    Par fab76000 dans le forum Hibernate
    Réponses: 0
    Dernier message: 26/04/2011, 17h32
  3. Problème de tri avec une macro
    Par Imer2008 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/06/2008, 14h19
  4. problème de tri avec une requête ajout
    Par funkyjul dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 25/03/2008, 11h53
  5. Problème de requête pour une relation de type n-n
    Par toutoune60 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/03/2007, 15h41

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