2017-06-26 6 views
0

J'ai 3 tables au total dans phpMyAdmin:Comment sélectionner un à plusieurs données relationnelles en PHP PDO

  1. Films: tmdb_movies

  2. Cast: cast. clé étrangère est cast_tmdb_id pour la table tmdb_movies colonne tmdb_idscreenshot

  3. Genres: genres. clé étrangère est genres_tmdb_id pour la table tmdb_movies colonne tmdb_idscreenshot

Je veux sortir les champs suivants:

  • movie_title colonne de tmdb_movies Table

  • toutes genres_name lignes de genres Table

  • tous cast_name lignes du tableau cast.

Quelle est la plus petite commande pour sélectionner et écho des données? Je ne suis pas familier avec la commande join dans SQL.

Ceci est mon code actuel

<?php 

    $stmt = $conn->prepare("SELECT tmdb_movies.*, GROUP_CONCAT(genres_name) as genres_name 
    FROM tmdb_movies JOIN genres ON tmdb_movies.tmdb_id=genres.cast_tmdb_id 
    GROUP BY tmdb_movies.cast_tmdb_id, tmdb_movies.tmdb_id, tmdb_movies.movie_title"); 

     // Then fire it up 
     $stmt->execute(); 
     // Pick up the result as an array 
     $result = $stmt->fetchAll(); 

     // Now you run through this array in many ways, for example 
     foreach ($result as $row) { 
     print "".$row["movie_title"]." ".$row["genres_name"] ." ".$row["cast_name"] ."<br/>"; 
    } 


    ?> 
+0

Obtenez-vous une erreur avec votre code actuel? Si oui, quel est le message d'erreur? – jason

+0

On dirait que 'ON tmdb_movies.tmdb_id = genres.cast_tmdb_id' devrait être' ON tmdb_movies.tmdb_id = genres.genres_tmdb_id'. – jason

+0

'Erreur irrécupérable: PDOException non interceptée: SQLSTATE [42S22]: Colonne non trouvée: 1054 Colonne inconnue 'tmdb_movies.genres_tmdb_id' dans 'instruction de groupe' dans' –

Répondre

0
SELECT tmdb_movies.movie_title, GROUP_CONCAT(DISTINCT genres.genres_name SEPARATOR ', ') AS genres_names, GROUP_CONCAT(DISTINCT cast.cast_name SEPARATOR ', ') AS cast_name 
        FROM tmdb_movies 
        JOIN genres ON tmdb_movies.tmbd_id=genres.genres_tmdb_id 
        JOIN cast ON cast.cast_tmdb_id=tmdb_movies.tmbd_id 
        GROUP BY tmdb_movies.movie_title 
        ORDER BY tmdb_movies.movie_title 

Explainations:

GROUP_CONCAT => Concat champs de différentes lignes dans un même champ

join => vous faites deux tables correspondent par leur

GROUPE BY => données de groupe par champs

J'ai fait la requête que je pouvais sans réellement voir vos tables, donc vous pourriez vouloir l'adapter si cela ne fonctionne pas au premier essai.