IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requete SQL PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut Requete SQL PHP
    bonjour,

    j'ai 3 tables :

    un peu du style :
    http://www.oleane-hebergement.com/gf...basevideo2.gif

    voilà j'aimerai une requete qui me selectionne les acteurs de exactement 3 films donnees

    Exemple :

    table acteur:
    id = 1, prenom = bruce, nom = willis
    id = 2, prenom = Jessica, nom = alba

    table film :
    id = 1, Film = armageddon
    id = 2, Film = Sin City
    id = 3, Film = 6eme sens

    table joue
    idfilm = 1, idacteur = 1
    idfilm = 2, idacteur = 1
    idfilm = 3, idacteur = 1
    idfilm = 2, idacteur = 2


    je veux les acteurs qui ont joué dans les films 1 ET 2 ET 3 et donc ca renvoi : 1 (bruce willis)


    voilà je sais pas si c'est clair... sachant que les id films dont je cherche les acteurs sont dans un tableau (ex : $tableau = { 1, 2, 3, ...})

    merci de votre aide

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    merci de nous préciser quelle est la base de données...

    Il faut utiliser les jointure, pour du mysql, ça serait du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $film_recherche = "armageddon";
    $sql = "SELECT a.prenom, a.nom FROM ACTEUR as a, FILM as f, JOUE as j WHERE j.idacteur = a.id AND j.idfilm = f.id AND f.Film LIKE '$film_recherche'";
    $res = mysql_query($sql) or die(mysql_error());
     
    if(mysql_num_rows($res) == 0) echo "Ancun film trouvé";
    else {
       while($row = mysql_fetch_assoc($res)) {
          echo $row['prenom']." ".$row['nom']."<br />";
       }
    }
    ;-)

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    base de donnees ? euh mysql... (avec EasyPhp 1.8 )

    par contre si je selectionne plusieurs films genre
    $film_recherche = {'armageddon', '6eme sens', 'sin city'}

    je peux pas faire de

    ...AND f.Film LIKE '$film_recherche[0]' AND f.Film LIKE '$film_recherche[1]' AND f.Film LIKE '$film_recherche[3]' ....

    merci de votre aide

  4. #4
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    il faut utiliser la clause IN de MySQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $film_recherche = array("armageddon","Sin City","6eme sens");
    if(count($film_recherche)) {
       $films = "'";
       $films .= implode("','",$film_recherche);
       $films .= "'";
       $sql = "SELECT a.prenom, a.nom, f.Film FROM ACTEUR as a, FILM as f,    JOUE as j WHERE j.idacteur = a.id AND j.idfilm = f.id AND f.Film IN     (".$films.")";
       $res = mysql_query($sql) or die(mysql_error());
     
       if(mysql_num_rows($res) == 0) echo "Ancun film trouvé";
       else {
          while($row = mysql_fetch_assoc($res)) {
             echo $row['prenom']." ".$row['nom']."joue dans ".$row['Film']."<br />";
          }
       }
    }
    [edit] pardon, j'ai oublié la gestion des quotes que j'ajoute illico...;-)[/edit]

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    non car la clause IN correspond à des OU, donc il me selectionnera les acteurs qui sont aussi que dans 'armageddon' par exemple.

    moi je veux exactement les acteurs qui ont joué dans les 3 films.... je sais pas si c'est clair ?

  6. #6
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par CaptainChoc
    je sais pas si c'est clair ?
    sisi trés clair captain, sauf que t'es pas dans le bon forum, ça concerne plus mysql ou le language sql...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    $film_recherche = array("armageddon","Sin City","6eme sens");
    if(count($film_recherche)) {
       $clause = " AND ";
       foreach($film_recherche as $film) {
          $clause .= "f.Film LIKE '".$film."' AND ";
       }
       $clause = substr($clause,0,-5);
       $sql = "SELECT a.prenom, a.nom, f.Film FROM ACTEUR as a, FILM as f, JOUE as j WHERE j.idacteur = a.id AND j.idfilm = f.id".$clause;
       $res = mysql_query($sql) or die(mysql_error());
     
       if(mysql_num_rows($res) == 0) echo "Ancun film trouvé";
       else {
          while($row = mysql_fetch_assoc($res)) {
             echo $row['prenom']." ".$row['nom']."joue dans ".$row['Film']."<br />";
          }
       }
    }

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    dsl pour la rubrique...

    par contre ce que tu m'as donné ne marche pas

    si je demande les acteurs qui ont joué que dans armageddon, ok..
    masi si je demande armageddon ET SinCity il me dit aucun acteur trouvé...

    alors qu'il devrait me ressortir bruce willis (j'ai verifié ma table, elle devrait etre bonne)

    merci de ton aide

  8. #8
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    oui ça marche pas, et c'est normal, car c'est pas possible de retourner un champs ayant deux valeurs différente comme clause...
    désolé, mais là, je ne suis plus bon à rien à cette heure, on verra ça plus tard à tête reposée, je te conseille toutefois de poser la question sur un forum plus approprié...

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    C'est pas bien de faire faire ses exercices de cours par les autres
    Je penche pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    SELECT acteur.*
    FROM (
       SELECT a1.id AS id 
       FROM acteur AS a1, joue AS j1, film AS f1
       WHERE a1.id = j1.acteur AND j1.film = f1.id
          AND f1.nom LIKE 'armageddon'
       ) AS r1,
             (
       SELECT a2.id AS id 
       FROM acteur AS a2, joue AS j2, film AS f2
       WHERE a2.id = j2.acteur AND j2.film = f2.id
          AND f2.nom LIKE 'sin city'
       ) AS r2,
             (
       SELECT a3.id AS id 
       FROM acteur AS a3, joue AS j3, film AS f3
       WHERE a3.id = j3.acteur AND j3.film = f3.id
          AND f3.nom LIKE '6eme sens'
       ) AS r3,
             acteur
    WHERE r1.id = r2.id AND r2.id = r3.id AND
       acteur.id = r1.id

  10. #10
    Membre régulier
    Inscrit en
    Novembre 2002
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 291
    Points : 81
    Points
    81
    Par défaut
    merci j'ai un peu modifié pour que ce soit generique.

    ca marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] probleme requete sql/php
    Par lumbroso dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 16/09/2012, 12h20
  2. [MySQL] Requetes SQL PHP News
    Par makamine dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/05/2011, 00h50
  3. [MySQL] Requetes SQL PHP
    Par makamine dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 28/04/2011, 14h17
  4. [MySQL] requete sql php
    Par asus02 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 09/01/2011, 19h32
  5. [MySQL] Optimisation requete SQL/php
    Par tripsi dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/04/2010, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo