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 :

Requête: "User 1 -> N Langues", users avec Langue 1 ET 2 ?


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Requête: "User 1 -> N Langues", users avec Langue 1 ET 2 ?
    Voici mon modèle, très très simplifié

    Table "User"
    - id

    Table "Langues"
    - user_id
    - langue

    Un utilisateur peut donc parler plusieurs langues. Avec une seule requête, je peux trouver les utilisateurs qui parle une langue spécifiée. Je peux aussi trouver les utilisateurs qui parle une langue OU une autre.

    Maintenant, le problème, très bête et très méchant : je veux, avec une seule requête, trouver tous les utilisateurs qui parlent une langue ET une autre. Je souhaite en fait pouvoir chercher des utilisateurs parlant plusieurs langues en même temps, le nombre de langues recherchées étant indéterminé.

    J'espérais trouver une requête simple pour cela, je suis peut-être passé à côté de quelque chose d'évident... frustration ^^; (Suis-je dans le cas de la division relationnelle expliqué ici : http://sqlpro.developpez.com/cours/divrelationnelle/ ?)

    Je préfèrerais une requête "simple" car j'ai quelques contraintes. Je suis sous MySQL5, et je développe en Ruby on Rails qui implique certaines limitations si on veut profiter de certaines caractéristiques de l'ORM.
    Suis-je dans un cas qui n'est trivial que sur le papier, ou est-ce que je suis passé à côté d'une solution "évidente" ?

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par AlSquire
    Voici mon modèle, très très simplifié

    Table "User"
    - id

    Table "Langues"
    - user_id
    - langue

    Avec une seule requête, je peux trouver les utilisateurs qui parle une langue spécifiée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select user_id from langues where langue = 'français'
    Je peux aussi trouver les utilisateurs qui parle une langue OU une autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select user_id from langues where langue in ('français','anglais')
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select user_id from langues where langue = 'français' or langue = 'anglais'

    je veux, avec une seule requête, trouver tous les utilisateurs qui parlent une langue ET une autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select user_id from langues where langue = 'français' and langue = 'anglais'

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Nan, la solution n'est pas SI évidente... j'aurais aimé cela dit ^^ ( En gros tu fais SELECT... WHERE "anglais" = "francais" )

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Les utilisateurs qui parlent français et anglais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT user_id 
    FROM langues 
    WHERE langue IN ('français', 'anglais')
    GROUP BY user_id
    HAVING count(*) = 2

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    al1 : merci (très en retard).

    J'essayais justement d'éviter ce cas de figure, mais faute de mieux j'ai tout de même tenter de l'implémenter sous Rails, et je m'en sors au final avec quelque chose de fonctionnel.

    Puis j'ai découvert que je n'étais pas le seul à m'être posé la question, et finalement ce serait la meilleur approche, voir ici : http://blog.hasmanythrough.com/2006/...-enough-part-2
    (article en anglais et orienté Ruby on Rails)

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

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