如何在多对多关系中只重复一次行

yzckvree  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(439)

我正在处理php上的多对多关系,我有3个表,movie表包含电影名称,movie id genre表包含流派和流派id,movie\u genre表包含电影id和流派id
类型表具有以下值

  1. (1 ,'action'),
  2. (2 ,'comedy'),
  3. (3 ,'drama'),
  4. (4 ,'mystery');

我使用下面的代码获取数据

  1. $query = " SELECT movie_name,movie_id,genre FROM movies
  2. JOIN movie_genre ON movies.movie_id = movie_genre.movie_id
  3. JOIN genre ON movie_genre.genre_id = genre.genre_id
  4. WHERE movie.movie_id = ?";
  5. $stmt = mysqli_prepare($conn, $query);
  6. $stmt->bind_param('i', $id);
  7. $stmt->execute();
  8. $result = $stmt->get_result();
  9. if(mysqli_num_rows($result) > 0 ){
  10. while ($row = mysqli_fetch_assoc($result)) {
  11. echo ' movie_id: '.$row["movie_id"].' movie name:'.$row["movie_name"].'
  12. Genres:' .$row["genre"]
  13. }}

但结果是
电影名称类型[1]
电影名称类型[2]
电影名称类型[3]
一个例子

  1. movie_id:55 movie name: titanic genre : action
  2. movie_id:55 movie name: titanic genre : drama
  3. movie_id:55 movie name: titanic genre : romance

我想要的结果是

  1. movie_id:55 movie name: titanic genre : action drama romance

我确实尝试使用极限1,但结果只显示了第一种流派

a64a0gku

a64a0gku1#

需要做一个循环,只针对我不能测试的类型,所以这是把我想象的工作,但这将是沿着这些路线的东西,这里可能有语法错误

  1. $query = " SELECT movie_name,movie_id,genre FROM movies
  2. JOIN movie_genre ON movies.movie_id = movie_genre.movie_id
  3. JOIN genre ON movie_genre.genre_id = genre.genre_id
  4. WHERE movie.movie_id = ?";
  5. $stmt = mysqli_prepare($conn, $query);
  6. $stmt->bind_param('i', $id);
  7. $stmt->execute();
  8. $result = $stmt->get_result();
  9. if(mysqli_num_rows($result) > 0 ){
  10. // if it's greater than zero, great, we have at least 1 movie.
  11. // but if it's greater than 1, then we know we have more than 1 genre
  12. while ($row = mysqli_fetch_assoc($result)) {
  13. echo 'movie_id:'.$row["movie_id"].'movie name:'.$row["movie_name"];
  14. break; // so it only runs through this loop once, instead of using limit
  15. }//end while
  16. if(mysqli_num_rows($result) > 1 ){
  17. // more than 1 genre so loop and print out just genres
  18. while ($row = mysqli_fetch_assoc($result)) {
  19. echo $row["genre"];
  20. }//end while
  21. }//end if more than 1 genre
  22. }//end if
展开查看全部
ghhkc1vu

ghhkc1vu2#

你可以用 GROUP_CONCAT 以及 GROUP BY :

  1. SELECT movie_name,movie_id, GROUP_CONCAT(genre SEPARATOR ' ') AS genre
  2. FROM movies
  3. JOIN movie_genre ON movies.movie_id = movie_genre.movie_id
  4. JOIN genre ON movie_genre.genre_id = genre.genre_id
  5. WHERE movie.movie_id = ?
  6. GROUP BY movie_name,movie_id

相关问题