Показать весь список фильмов, используя MySQL и PHP - PullRequest
0 голосов
/ 05 июня 2018

У меня есть база данных

-movie ( movie_id , title , year)
          1      , thor , 2017
          2      , deadpool,2018    
-genre ( genre_id , genre_name )
              1      , action
              2      , adventure
              3      , comedy    

-movie_genre ( movie_id , genre_id )
                     1     ,    1
                     1     ,    2
                     2     ,    2
                     2     ,    3

мой php-код

<?php 
$info_query = mysql_query("
SELECT * 
  FROM movie
     , genre
     , movie_genre 
 WHERE movie.movie_id = movie_genre.movie_id 
   AND genre.genre_id = movie_genre.genre_id
")or die(mysql_error());
$info_count =mysql_num_rows($info_query);
while($info_row = mysql_fetch_array($info_query)){
    if ($info_count > 0){ ?>
        <?php echo $info_row['title'] ?>
        <?php echo $info_row['genre'] ?>
        <?php
    }  } 
?>

вывод

thor action thor adventure

и я хочу

thor acton adventure
deadpool adventure comedy

Ответы [ 2 ]

0 голосов
/ 06 июня 2018
<?php
$info_query = mysql_query("
    SELECT mv.movie_id, mv.title, gr.genre_name
    FROM movie_genre mg
    INNER JOIN movie mv ON mg.movie_id = mv.movie_id
    INNER JOIN genre gr ON mg.genre_id = gr.genre_id
")or die(mysql_error());

$info_count = mysql_num_rows($info_query);

if ($info_count > 0) {
    $movies = [];
    while ($info_row = mysql_fetch_array($info_query)) {

        if (!isset($movies[$info_row['movie_id']])) {
            $movies[$info_row['movie_id']] = ['title' => $info_row['title'], 'genres' => []];
        }

        $movies[$info_row['movie_id']]['genres'][] = $info_row['genre_name'];
    }

    foreach ($movies as $movie_id => $movie ) {
        echo $movie['title'] .' ';
        foreach ($movie['genres'] as $genre) {
            echo $genre . ' ';
        }
        echo "\n<br>";
    }
}
0 голосов
/ 05 июня 2018

Этот запрос должен работать:

SELECT title, 
GROUP_CONCAT(genre_name) AS genre
FROM movie_genre 
JOIN movie ON movie.movie_id = movie_genre.movie_id 
JOIN genre ON genre.genre_id = movie_genre.genre_id 
GROUP BY title

Затем в php, если хотите, вы можете заменить запятую на пробелы следующим образом:

<?php 
echo $info_row['title'];
echo str_replace(',',' ',$info_row['genre']);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...