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

Requêtes MySQL Discussion :

Requête 3 tables - group by - select multi critères


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Requête 3 tables - group by - select multi critères
    Bonjour,
    Selon le schéma de la table ci-dessous, je désire afficher les "users" qui parlent uniquement "English" et "Chinese".

    Ma requête actuel pose problème car elle n'affiche pas les "users" qui ne parlent que les langues que je désire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * 
    FROM user LEFT JOIN user_language 
         ON user.user_id = user_language.user_id
    WHERE user_language.language_id IN ('2','3')
    GROUP BY user.user_id
    Une idée ?

    Merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    --
    -- Structure de la table `language`
    --
     
    CREATE TABLE IF NOT EXISTS `language` (
    `language_id` int(11) NOT NULL AUTO_INCREMENT,
    `title` varchar(100) NOT NULL,
    PRIMARY KEY (`language_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    --
    -- Contenu de la table `language`
    --
     
    INSERT INTO `language` (`language_id`, `title`) VALUES
    (1, 'French'),
    (2, 'English'),
    (3, 'Chinese');
    -- --------------------------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    --
    -- Structure de la table `user`
    --
     
    CREATE TABLE IF NOT EXISTS `user` (
    `user_id` int(10) NOT NULL AUTO_INCREMENT,
    `name` varchar(100) NOT NULL,
    PRIMARY KEY (`user_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    --
    -- Contenu de la table `user`
    --
     
    INSERT INTO `user` (`user_id`, `name`) VALUES
    (1, 'Toto'),
    (2, 'Tutu'),
    (3, 'Tata'),
    (4, 'Tete');
    -- --------------------------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    --
    -- Structure de la table `user_language`
    --
     
    CREATE TABLE IF NOT EXISTS `user_language` (
    `user_id` int(10) NOT NULL,
    `language_id` int(10) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --
    -- Contenu de la table `user_language`
    --
     
    INSERT INTO `user_language` (`user_id`, `language_id`) VALUES
    (1, 1),
    (1, 2),
    (1, 3),
    (2, 3),
    (3, 2),
    (3, 3);

  2. #2
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    Bonjour,

    est-ce que tu pourrais préciser le type de résultats que tu veux ? J'ai enlevé le GROUP BY dans ta requête, puisqu'aucune fonction d'agrégation n'est utilisée ici, et voici le résultat :
    user_id | name | user_id1 | language_id
    1 toto 1 2
    1 toto 1 3
    2 tutu 2 3
    3 tata 3 2
    3 tata 3 3

    Petite remarque : il faut penser à lister les champs dans la requête SQL, plutôt que de mettre "SELECT *" !
    Cordialement.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bonjou,
    Merci pour ta réponse!
    Voici le type de résultats désirés :
    user_id | name | user_id1 | language_id
    1 toto 1 2
    1 toto 1 3
    3 tata 3 2
    3 tata 3 3

    "Tutu" ne doit pas s'afficher car il ne parle pas les 2 langues recherchées.

    Merci

  4. #4
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    essaies ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT u1.name, u1.user_id, ul1.language_id, ul2.language_id
      FROM       user u1
              INNER JOIN
                 user_language AS ul1
              ON ul1.user_id = u1.user_id AND ul1.language_id = 2
           INNER JOIN
              (user AS u2,
               user_language AS ul2)
           ON     u1.user_id = u2.user_id
              AND ul2.user_id = u2.user_id
              AND ul2.language_id = 3;
    Cordialement.

Discussions similaires

  1. SELECT multi-critères avec condition absolue
    Par wedz79 dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/04/2014, 12h52
  2. [MySQL] Requête multi-critère dans une table très simple
    Par flashnet dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/05/2013, 20h56
  3. [Toutes versions] requête multiple dans formulaire de recherche multi critère.
    Par Lyude dans le forum IHM
    Réponses: 16
    Dernier message: 11/05/2010, 18h51
  4. Requête Select Top et Order by multi-critères en même temps.
    Par Courgette17 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 03/03/2008, 10h51
  5. Select multi critères
    Par Nicolas Carron dans le forum Langage SQL
    Réponses: 0
    Dernier message: 11/12/2007, 15h59

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