Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP PDO中选择一对多关系数据_Php_Mysql_Pdo_Foreign Keys_Foreign Key Relationship - Fatal编程技术网

如何在PHP PDO中选择一对多关系数据

如何在PHP PDO中选择一对多关系数据,php,mysql,pdo,foreign-keys,foreign-key-relationship,Php,Mysql,Pdo,Foreign Keys,Foreign Key Relationship,我在PHPMyAdmin中总共有3个表: 电影:tmdb\u电影 Cast:Cast。外键是表tmdb\u电影columntmdb\u id 流派:流派。外键是表tmdb\u电影columntmdb\u id 我想输出以下字段: tmdb\u电影表中的movie\u title列 genres\u name表中的所有genres\u行 表中的所有cast\u name行 选择和回送数据的最小命令是什么?我不熟悉SQL中的join命令 这是我当前的代码 <?php $stmt

我在PHPMyAdmin中总共有3个表:

  • 电影
    tmdb\u电影

  • Cast
    Cast
    。外键是表
    tmdb\u电影
    column
    tmdb\u id

  • 流派
    流派
    。外键是表
    tmdb\u电影
    column
    tmdb\u id

  • 我想输出以下字段:

    • tmdb\u电影
      表中的
      movie\u title

    • genres\u name
      表中的所有
      genres\u行

    • 表中的所有
      cast\u name

    选择和回送数据的最小命令是什么?我不熟悉SQL中的
    join
    命令

    这是我当前的代码

    <?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/>";
        }
    
    
        ?>
    
    
    
    解释:

    GROUP_CONCAT=>一个字段中不同行的CONCAT字段

    JOIN=>使两个表按键对应

    GROUP BY=>按这些字段分组数据


    我已经在没有实际查看表的情况下完成了查询,因此,如果第一次尝试不起作用,您可能希望对其进行调整。

    您当前的代码是否有错误?如果是这样,错误消息是什么?看起来像tmdb_电影上的
    。tmdb_id=genres.cast_tmdb_id
    应该是tmdb_电影上的
    。tmdb_id=genres.genres_tmdb_id
    致命错误:未捕获PDOException:SQLSTATE[42S22]:未找到列:中的“group statement”中的1054未知列“tmdb_movies.genres_tmdb_id”
    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