Отображение всех списков фильмов с использованием mysql и php

Ravi K Jaiswal спросил: 12 мая 2018 в 04:39 в: php

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

-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 ответа

Marcel Bezerra ответил: 12 мая 2018 в 07:42
<?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>";
    }
}
Liam G ответил: 13 мая 2018 в 02:49

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

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']);
?>
Ravi K Jaiswal ответил: 12 мая 2018 в 04:53
не происходит Я получаю тот же результат
Liam G ответил: 12 мая 2018 в 04:54
Посмотрите, как я редактирую, используя GROUP_CONCAT, это должно быть то, что вам нужно, сначала неправильно спросите вопрос и на мобильном телефоне
Ravi K Jaiswal ответил: 12 мая 2018 в 05:10
теперь он говорит: "У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с" SEPERATOR ") FROM movie_genre JOIN movie ON movie.movie_id = movie_genre.movie_ 'на линии 1"
Liam G ответил: 12 мая 2018 в 05:14
Вместо этого попробуйте SEPERATOR вместо запятой или необходимо, чтобы они были разделены по пространству?
Ravi K Jaiswal ответил: 12 мая 2018 в 05:18
я не знаю, я пытался, но это не происходит BTW, я новичок