Partage
  • Partager sur Facebook
  • Partager sur Twitter

fetch_object 2 table avec LEFT JOIN

Sujet résolu
    23 octobre 2017 à 0:13:36

    Bonjour a tous,

    je suis un peut bloquer, j'ai un champs sur mais 2 Table : "telephoneId", et voila ma requette :

    SELECT * FROM telephones T
    LEFT JOIN telephones_suite TS
    ON T.telephoneId = TS.telephoneId
    WHERE ( T.modele LIKE '%" . $queryString . "%'
    OR TS.Ref_Technique LIKE '%" . $queryString . "%')

    en PHP avec un While j'affiche le resultat de ma requette :

    while ($result = $query ->fetch_object()) {
    
    	echo $result->telephoneId;
    
    }

    le problème est comment savoir si le champs "telephoneId" affiché si dessu est celui de la Table T ou TS ?

    genre : $result->T['telephoneId']

    Le problème est que parfois je n'ai pas d'entrée dans ma table TS alors mon code PHP n'affiche plus $result->telephoneId


    Cordialement,

    La Cafeine

    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2017 à 9:54:20

      Bonjour,

      En fait c'est le problème d'utiliser SELECT * ... On ne sait plus où on en est si certains noms de colonnes sont ambigus ...

      Je te conseille fortement de spécifier unitairement dans le SELECT les colonnes dont tu as besoin, et, pour éviter les ambiguïtés, d'utiliser des alias quand cela est nécessaire.

      Exemple :

      SELECT
      	T.telephoneId AS tel_T,
      	TS.telephoneId AS tel_TS
      FROM
      	telephones T
      		LEFT JOIN telephones_suite TS
      			ON T.telephoneId = TS.telephoneId
      WHERE
      	T.modele LIKE '%" . $queryString . "%'
      	OR TS.Ref_Technique LIKE '%" . $queryString . "%'

      Ainsi côté PHP tu pourras récupérer tel_T ou tel_TS selon ton besoin ...

      Par contre, dans la mesure ou tel_T = tel_TS (c'est ta condition de jointure) je ne vois pas l'intérêt de les différencier au final ...

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        25 octobre 2017 à 22:25:32

        haaa super, merci ça fonctionne, 

        mon champs telephoneId est le même sur les 2 table, mais lorsque il n'existe pas sur ma 2eme table alors il n'ai pas afficher en PHP,

        Le fait d'utiliser comme tu ma expliquer : "T.telephoneid" ça résout mon problème même si je n'utilise pas le "TS.telephoneid" dans ma requête.

        Et ce que le fait de tous sélectionnée les champs ou que quelque un joue un rôle dans la rapidité de la requette ?

        la quel est la plus rapide, le * ou en sélectionnant les colonnes ?

        Cordialement,

        La Cafeine

        • Partager sur Facebook
        • Partager sur Twitter
          26 octobre 2017 à 10:24:36

          LaCafeine a écrit:

          mon champs telephoneId est le même sur les 2 table, mais lorsque il n'existe pas sur ma 2eme table alors il n'ai pas afficher en PHP

          Alors tu peux utiliser COALESCE :

          SELECT
              COALESCE( TS.telephoneId, T.telephoneId ) AS tel
          FROM
              telephones T
                  LEFT JOIN telephones_suite TS
                      ON T.telephoneId = TS.telephoneId
          WHERE
              T.modele LIKE '%" . $queryString . "%'
              OR TS.Ref_Technique LIKE '%" . $queryString . "%'

          LaCafeine a écrit:

          quel est la plus rapide, le * ou en sélectionnant les colonnes ?

          En précisant les colonnes tu remontes moins d'information, tu allèges donc le traitement et le volume de données à échanger entre PHP et MySQL ... Dans la plupart des cas il est préférable de ne pas utiliser * ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

          fetch_object 2 table avec LEFT JOIN

          × 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