php - 如何使用 PHP 选择和回显 MySQL 数据(一对多)

标签 php mysql

这是我当前的代码,它可以很好地解决一个问题。

$stmt = $conn->prepare("SELECT * FROM tmdb_movies JOIN genres ON genres.genres_tmdb_id=tmdb_movies.tmdb_id 
  ");
     // 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/>";
}

问题是,我试图呼应电影名称及其流派。

我想回应的是:

The Dark Knight - Action, Crime, Drama

代码回显什么:

The Dark Knight - Action

The Dark Knight - Crime

The Dark Knight - Drama

主电影表截图http://prntscr.com/fokwip

及类型电影表截图http://prntscr.com/fokwoy

最佳答案

要回显您想要的内容,您可以更改 sql 查询:

$stmt = $conn->prepare("SELECT *, GROUP_CONCAT(genres.genres_name SEPARATOR ', ') AS genre_concat FROM tmdb_movies JOIN genres ON genres.genres_tmdb_id=tmdb_movies.tmdb_id GROUP BY tmdb_movies.movie_title");

//  sql strict group by

$stmt = $conn->prepare("SELECT tmdb_movies.movie_title, tmdb_movies.cast_name, GROUP_CONCAT(DISTINCT genres.genres_name SEPARATOR ', ') AS genre_concat FROM tmdb_movies JOIN genres ON genres.genres_tmdb_id=tmdb_movies.tmdb_id GROUP BY tmdb_movies.movie_title, tmdb_movies.cast_name ORDER BY tmdb_movies.movie_title");

$stmt->execute();

$result = $stmt->fetchAll();

foreach ($result as $row) {
        print "".$row["movie_title"]." ".$row["genre_concat"] ."   ".$row["cast_name"] ."<br/>";}

GROUP_CONCAT 允许为每个独特的电影标题连接所有不同的类型。

更多文档:

分组依据:https://www.w3schools.com/sql/sql_groupby.asp

GROUP_CONCAT:https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

关于php - 如何使用 PHP 选择和回显 MySQL 数据(一对多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44771580/

相关文章:

php - 通过 Zend Framework 提供大文件

javascript - 在文本字段中显示下拉列表的结果

php - 我应该将更新的计数作为用户表的一部分吗?

php - filter_var php 问题

PHP 语法糖与 Perl

Mysql查询: Getting all result in grid view

mysql - 可视化数据库模式的好工具?

mysql - 来自不同表的求和和分组

mysql - 按多个条目分组

php - Wordpress 插件表,无法使用 dbDelta 创建,尽管 sql 是正确的