Partage
  • Partager sur Facebook
  • Partager sur Twitter

SQL : Sélectionner des ID avec deux valeurs

Sujet résolu
    24 août 2022 à 16:53:39

    Bonjour !

    Petite question sur la sortie d'une liste en fonction de deux valeurs distinctes.

    Voici ma structure de table :

    ID | ACTEUR | FILM

    1 | 123 | 26
    2 | 123 | 34
    3 | 241 | 51
    4 | 254 | 12
    5 | 105 | 48
    6 | 241 | 26
    7 | 187 | 12
    8 | 123 | 75
    9 | 241 | 34

    Je souhaiterai faire une requête qui me liste les "acteurs" ayant participé à deux "films" déterminés :
    Ex : Films sélectionnés 26 et 34 :

    1 | 123 | 26
    2 | 123 | 34
    6 | 241 | 26
    9 | 241 | 34

    Je suis parti sur ce type de requête :

    $sql->query("SELECT * FROM "._TABLE_." WHERE film IN ('26', '34') GROUP BY acteur");


    Sauf qu'en résultat, je vais avoir les acteurs qui ont participé à l'un ou l'autre et non pas aux deux.

    Avez-vous une idée pour corriger cela ?

    Merci d'avance !

    • Partager sur Facebook
    • Partager sur Twitter
      24 août 2022 à 22:32:45

      Bonjour,

      Ce que tu cherches à faire s'appelle une intersection (INTERSECT). Selon le SGBD utilisé la réponse sera différente... Qu'utilises-tu ?

      • 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 août 2022 à 22:55:45

        Bonjour !

        J'utilise MySQL. :)
        • Partager sur Facebook
        • Partager sur Twitter
          25 août 2022 à 9:15:48

          MySQL n'implémente pas INTERSECT, il faut donc "bricoler" par exemple avec des jointures :

          SELECT DISTINCT A.*
          FROM
          	film_acteur FA1
          		INNER JOIN acteur A
          			ON FA1.acteur = A.id
          		INNER JOIN film_acteur FA2
          			ON FA1.acteur = FA2.acteur
          WHERE
          	FA1.film = '26'
          	AND FA2.film = '34'

          J'ai présumé du nom de la table de relation ...

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            26 août 2022 à 10:43:06

            Benzouye a écrit:

            MySQL n'implémente pas INTERSECT, il faut donc "bricoler" par exemple avec des jointures :

            SELECT DISTINCT A.*
            FROM
            	film_acteur FA1
            		INNER JOIN acteur A
            			ON FA1.acteur = A.id
            		INNER JOIN film_acteur FA2
            			ON FA1.acteur = FA2.acteur
            WHERE
            	FA1.film = '26'
            	AND FA2.film = '34'

            J'ai présumé du nom de la table de relation ...


            Super ça fonctionne, merci beaucoup ! :)
            • Partager sur Facebook
            • Partager sur Twitter

            SQL : Sélectionner des ID avec deux valeurs

            × 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