Partage
  • Partager sur Facebook
  • Partager sur Twitter

INNER JOIN et LEFT JOIN

Sujet résolu
    23 février 2021 à 18:36:35

    Bonjour à tous,

    J’essaie d'afficher le résultat d'un SELECT via 2 tables et je galère...:) je cherche depuis un moment, il y a un truc que je fais pas bien...

    J'ai donc 2 tables :

    opex et opex_prive

    dans opex:

    id_opex

    status_opex (ACTIVER)

    equipe (TOTO)

    partage (OUI)

    Dans opex_prive

    id_opex_prive

    id_opex (index)

    mail_invitatation (@mail)

    Je voudrais sélectionner toutes les "opex" qui sont status_opex = ACTIVER, partage = OUI ou qui apprtient à mon equipe (TOTO) ou celle ou je suis invité...

    $reponse = $bdd->query("SELECT * FROM opex LEFT JOIN opex_prive ON opex.id_opex = opex_prive.id_opex
    WHERE status_opex = 'ACTIVER'
    AND partage = 'OUI'
    OR equipe= '".$myTeam."'
    OR mail_invitation= '".$mail_invit."'


    L'affichage est bon, je vois bien ma liste sauf qu'il me remonte aucun id sauf celle qui a une correspondance avec la deuxième table...

    -
    Edité par legrec 23 février 2021 à 18:50:16

    • Partager sur Facebook
    • Partager sur Twitter
      23 février 2021 à 21:23:32

      Bonjour,

      Afin d'éviter les problème d'opérateurs logiques et de leur priorité, je te conseille d'utiliser des parenthèses pour bien structurer les conditions.

      Je ne pense pas que la jointure externe soit une solution ici, je passerai plutôt par un IN.

      Vu qu'un opex peut avoir plusieurs opex_prive (relation 1,n), il faudra au passage utiliser un DISTINCT pour éviter ces potentiels doublons.

      Enfin, côté PHP et PDO, il est toujours préférable d'utiliser les requêtes préparées.

      Une solution serait donc :

      <?php
      	$requete = $bdd->prepare("
      		SELECT *
      		FROM opex
      		WHERE
      			(
      				status_opex = 'ACTIVER'
      				AND partage = 'OUI'
      			)
      			OR equipe = :team
      			OR id_opex IN (
      				SELECT DISCTINCT id_opex
      				FROM opex_prive
      				WHERE mail_invitation = :email
      			);"
      	);
      	$requete->execute( array(
      		'team' => $my_team,
      		'email' => $mail_invit
      	));
      	$resultats = $requete->fetchAll();
      ?>

      -
      Edité par Benzouye 24 février 2021 à 9:09:58

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        24 février 2021 à 7:38:08

        Bonjour Benzouye,

        Merci pour la réponse, pour le moment ça ne marche pas, je voudrais savoir à quoi correspond le "P." dans la sous requête de opex_prive ?

        • Partager sur Facebook
        • Partager sur Twitter
          24 février 2021 à 9:10:46

          C'est une erreur de ma part, au départ j'avais mis des alias sur ta requête pour simplifier l'écriture, et j'ai oublié de l'enlever. J'ai éditer mon message précédent ;)

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            24 février 2021 à 10:55:26

            Encore merci, ça fonctionne !

            • Partager sur Facebook
            • Partager sur Twitter

            INNER JOIN et 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