Partage
  • Partager sur Facebook
  • Partager sur Twitter

LIKE pour jointure

Sujet résolu
    22 novembre 2010 à 13:01:03

    Je voudrais savoir quand on fait une jointure entre 2 tables si l'on peut utiliser une autre fonction que
    " = " par exemple utiliser " LIKE"
    Par exemple le sript suivant ne marche pas, est ce du à l'utilisation de LIKE ou pourrait il marcher sans une autre erreur?

    $req = $bdd->query("SELECT cdf.circuit AS circuit_date, pf.journee 
    	FROM  circuit_depart_ferret AS cdf, periode_ferret AS pf 
    	WHERE pf.journee = '2011-06-01' 
    AND cdf.periode LIKE pf.periode ('%Ga11h%')") or die(print_r($bdd->errorInfo()));
    


    Si l'utilisation de "LIKE" n'est pas possible, existe il une autre fonction, ou dois je faire un champ allias de type "Ga11h_periode" et dans ce cas là comment dois je faire ma requête?

    Je vous remercie de votre collaboration.
    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2010 à 13:15:44

      Salut !

      Attention, ne confond les opérateurs de comparaison et LIKE. LIKE ne veut pas dire égal.

      Voici comment fonctionne LIKE :

      1)
      SELECT nom FROM client LIKE 'c%'
      


      Là, cela veut dire : "Sélectionne tout les noms dont ils commencent par c

      2)
      SELECT nom FROM client LIKE '%c'
      


      Ici, on dit : "Sélectionne tout les noms dont ils finissent par c

      3)
      SELECT nom FROM client LIKE '%c%'
      


      Pour terminer, ici, on dit : "Sélectionnent tous les noms dont ils comprennent c entre le début et la fin du nom
      • Partager sur Facebook
      • Partager sur Twitter
        22 novembre 2010 à 13:57:02


        OK, Peux tu répondre à la deuxième partie de ma question pour code sql?

        Citation : jecherche

        Si l'utilisation de "LIKE" n'est pas possible, existe il une autre fonction, ou dois je faire un champ allias de type "Ga11h_periode" et dans ce cas là comment dois je faire ma requête?



        $req = $bdd->query("SELECT cdf.circuit AS circuit_date, pf.journee 
        	FROM  circuit_depart_ferret AS cdf, periode_ferret AS pf 
        	WHERE pf.journee = '2011-06-01' 
        AND cdf.periode LIKE pf.periode ('%Ga11h%')") or die(print_r($bdd->errorInfo()));
        


        Existe il un autre opérateur que " = " pour une jointure.
        Merci pour l'aide.
        • Partager sur Facebook
        • Partager sur Twitter
          22 novembre 2010 à 14:04:08

          Essaie ceci :

          <?php
          $req = $bdd->query("SELECT cdf.circuit AS circuit_date, pf.journee 
          	FROM  circuit_depart_ferret AS cdf, periode_ferret AS pf 
          	WHERE pf.journee = '2011-06-01' 
          AND cdf.periode = pf.periode LIKE '%Ga11h%'") or die(print_r($bdd->errorInfo()));
          ?>
          
          • Partager sur Facebook
          • Partager sur Twitter
            22 novembre 2010 à 14:21:26

            bonne idée j'essaye ce soir
            A+
            • Partager sur Facebook
            • Partager sur Twitter
              22 novembre 2010 à 23:42:24

              Oui, tu peux mettre n'importe quoi dans une condition de JOIN (y compris un LIKE) pourvu que ce soit une expression valide. Après, quand à savoir si ça donnera ou pas le résultat que tu veux, ou si ça sera incroyablement lent, ça dépend !

              Sinon, tous les exemples postés avec LIKE dans ce topic sont faux :

              > cdf.periode LIKE pf.periode ('%Ga11h%')

              ne veut rien dire (SYNTAX ERROR)

              > V@l3NtIn

              Ne dites pas : SELECT nom FROM client LIKE 'c%'
              mais dites : SELECT nom FROM client WHERE nom LIKE 'c%'
              (sinon c'est bon)

              > cdf.periode = pf.periode LIKE '%Ga11h%'

              ne veut rien dire non plus mais il est cependant possible que dans un accès de perversion MySQL convertisse (cdf.periode = pf.periode) qui est un booléen en texte (obtenant donc '0' ou '1') puis teste l'opérateur LIKE qui retournera donc toujours FALSE puisque ni '0' ni '1' ne contiennent 'Ga11h'.

              Syntaxe du LIKE :

              truc LIKE machin

              LIKE est un opérateur binaire qui prend 2 strings (varchar, text, etc) truc et machin et qui retourne un booléen. Pour la syntaxe de 'machin' voir le post de v@lentin (avec la correction ci-dessus).

              Tu peux expliquer ta requête en français ?
              • Partager sur Facebook
              • Partager sur Twitter
                23 novembre 2010 à 1:19:16

                Bonsoir
                la solution de V@l3NtIn m'aurait intéressée mais elle ne marche pas, je voulais essayé de faire une jointure entre 2 tables où une table avait un champ avec la donnée: Ga11h et l'aute un champ avec une donnée qsdGa11hko
                j'espérai que son code qui suit fonctionnerai mais hélas non dommage car cela pouvait avoir pour moi des applications très intéressantes

                <?php
                $req = $bdd->query("SELECT cdf.circuit AS circuit_date, pf.journee 
                	FROM  circuit_depart_ferret AS cdf, periode_ferret AS pf 
                	WHERE pf.journee = '2011-06-01' 
                AND cdf.periode = pf.periode LIKE '%Ga11h%'") or die(print_r($bdd->errorInfo()));
                ?>
                

                Puisque c'est une mauvaise piste A+
                • Partager sur Facebook
                • Partager sur Twitter
                  23 novembre 2010 à 4:52:44

                  tu peux faire ceci :
                  WHERE cdf.periode LIKE CONCAT( '%', pf.periode,  '%' ) AND pf.periode = 'Ga11h'
                  

                  le résultat dépendra du nombre de lignes qui contiennent "Ga11h".
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 novembre 2010 à 22:26:44

                    Bonsoir,

                    J'appuie la demande de "Lord Casque Noir", que veux tu faire ?

                    Peut-être au départ y a t'il un défaut de modélisation ?

                    Le mieux est d'utiliser des jointures normalisées qui te permettront de bien séparer ce qui est de l'ordre de ta jointure et de ce qui est de ta sélection, genre :

                    SELECT cdf.circuit AS circuit_date, pf.journee
                    FROM circuit_depart_ferret AS cdf
                    INNER JOIN periode_ferret AS pf
                    ON (cdf.periode = fonction_extraction_de_chaine_propre_a_ton_sgbd(pf.periode, parametre1, parametre2))
                    WHERE pf.journee = '2011-06-01';

                    Voilà ... :)


                    • Partager sur Facebook
                    • Partager sur Twitter

                    LIKE pour jointure

                    × 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