Partage
  • Partager sur Facebook
  • Partager sur Twitter

AND qui respecte les deux conditions

    25 mai 2011 à 10:31:46

    Bonjour,

    J'ai la tête dans mon truc depuis maintenant trop de temps, je pense que c'est une question super bête mais je n'arrive pas à me rappeler.

    J'ai une requête SELECT du genre :
    SELECT * 
    FROM `profiles` AS `Profile` 
    	LEFT JOIN `profiles_skills` AS `ProfilesSkill` 
    		ON (`ProfilesSkill`.`profile_id` = `Profile`.`id`) 
    ;	LEFT JOIN `skills` AS `FilterTag` 
    ;		ON (`FilterTag`.`id` = `ProfilesSkill`.`skill_id`) 
    WHERE `ProfilesSkill`.`skill_id` = 5
    AND `ProfilesSkill`.`skill_id` = 7
    


    J'ai deux problèmes :
    - J'aimerais que les champs séléctionnés respectent les deux conditions (WHERE et AND) et pas récupérer ceux qui respecte l'une des deux, mais la ça me balance aussi les lignes qui respecte une des deux =_=
    - Lorsque je de-commente les deux lignes commentés il ne me ramène plus aucun résultat.

    Je pense que ma requête est mal faites, auquel cas merci beaucoup de m'aider parce que la je vois pas le bout xD
    • Partager sur Facebook
    • Partager sur Twitter
      25 mai 2011 à 10:38:41

      1/ Comment veux-tu que skill_id valle A LA FOIS 5 et 7 ???

      2/ Tu fais une jointure sur skills, mais dans ta clause ON, pas de trace de skills.
      • Partager sur Facebook
      • Partager sur Twitter
        25 mai 2011 à 10:50:50

        1/ La table "profiles_skills" est une table du genre :

        id | id_profile | id_skill

        Elle peux donc contenir :

        1 | 2 | 5
        2 | 2 | 7

        ( Meme id_profile mais deux id_skill different)

        Je voudrais récupérer ces deux lignes.

        2/ Et ben si o_O je donne à Skills l'alias "FilterTag" et dans la clause on il est bien present.
        • Partager sur Facebook
        • Partager sur Twitter
          25 mai 2011 à 10:53:40

          2/ Oups, en effet, j'ai lu trop vite...

          1/ Tu veux récupérer les profils qui ont les skills 5 et 7 alors ?? Parce que dans ton tableau, c'eest pas le même profil qui possède les 2 donc je comprend pas trop ton problème.
          • Partager sur Facebook
          • Partager sur Twitter
            25 mai 2011 à 10:56:01

            J'ai édité mon tableau, je m'étais planté xD Désolé.

            Je veux récupérer tout les profils ayant pour skill_id 5 et 7.
            • Partager sur Facebook
            • Partager sur Twitter
              25 mai 2011 à 10:58:14

              Ok !

              Alors ce que tu peux faire, c'est un GROUP BY sur id_profile.

              Dans le WHERE tu fais skill_id = ... OR skill_id = ... OR ....

              Et tu sélectionnes que les lignes HAVING COUNT(skill_id) > (le nombre de skills que tu exiges).
              • Partager sur Facebook
              • Partager sur Twitter
                25 mai 2011 à 11:02:26

                Le problème étant que je n'exige pas de minimum (si 1).
                Et que le nombre de skills peux varier de 1 à 5 =/
                • Partager sur Facebook
                • Partager sur Twitter
                  25 mai 2011 à 11:04:07

                  Le fait que le nombre de skills demandées puisse varier, c'est pas un problème justement.

                  Par contre, je pensais que JUSTEMENT, si tu demandais 2 skills, tu voulais UNIQUEMENT les profils qui ont bien ces deux skills, et pas une seule des 2... C'est ce qui est mis dans ton premier post en tout cas...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 mai 2011 à 11:08:53

                    Oui c'est bien ça,

                    Si l'utilisateur spécifié deux skills, le profil récupéré doit avoir ces deux skills.

                    J'suis désolé, j'ai plus les idées très clair, j'suis dedans depuis 24H non stop.
                    J'sais même plus écrire une requête xD
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 mai 2011 à 11:12:22

                      Ben donc fais ce que j'ai dit 2 posts plus haut, et ça ira.

                      Tu peux juste remplacer WHERE tu fais skill_id = ... OR skill_id = ... OR ....

                      Par WHERE skill_id IN (liste des skills demandées)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 mai 2011 à 11:18:14

                        La requete final donne donc :
                        SELECT * 
                        FROM `profiles` AS `Profile` 
                        	LEFT JOIN `profiles_skills` AS `ProfilesSkill` 
                        		ON (`ProfilesSkill`.`profile_id` = `Profile`.`id`) 
                        	LEFT JOIN `skills` AS `FilterTag` 
                        		ON (`FilterTag`.`id` = `ProfilesSkill`.`skill_id`) 
                        WHERE `ProfilesSkill`.`skill_id` IN(5, 7)
                        GROUP BY `Profile`.`id`
                        HAVING COUNT(`ProfilesSkill`.`skill_id`) >= 2
                        


                        Je ne me suis pas planté cette fois ? xD (Ça a l'air de fonctionner en tout cas)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 mai 2011 à 11:22:03

                          Yep, à mon avis, ça devrait être bon.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 mai 2011 à 11:22:19

                            Merci beaucoup Taguan !
                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 mai 2011 à 17:19:07

                              Un bon vieux between marché aussi :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                25 mai 2011 à 17:27:58

                                Ben il veut que ceux qui ont 5 ou 7, ou bien ceux qui sont entre 5 et 7 ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 mai 2011 à 17:30:36

                                  Ceux qui ont 5 ET 7, et donc non, un BETWEEN n'aurait pas servi ici
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 mai 2011 à 17:31:43

                                    Je viens de capter le GROUP BY -_- je viens de comprendre le problème enfaite ^^

                                    Autant pour moi
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    AND qui respecte les deux conditions

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown