获得电影的流派和演员表

时间:2019-10-08 21:01:40

标签: mysql sql

我正在编写一个程序,以获取电影的流派。

样本数据库:

    Movie        movie_id , title (1, snitch)
    genre        genre_id , genre (1, Action)(2, Animation)(3, Drama)(4, Crime )
    movie_genre  movie_id, genre_id (1,1)(1,3)(1,4)
    people       people_id, people (1, Dwayne Johnson)(2, Jason Douglas)
    movie_people movie_id, people_id (1,1) (1, 2)

我的代码是:

<?php 
$stmt = $pdo->query("
    SELECT * FROM movie, genre, movie_genre 
    WHERE 
        movie.movie_id = movie_genre.movie_id 
        AND genre.genre_id = movie_genre.genre_id 
        AND movie.name='snitch'
    UNION SELECT title, people FROM movie, people, movie_people 
    WHERE movie.movie_id = movie_people.movie_id                 
        AND people.people_id = movie_people.people_id 
        AND movie.name='snitch'
    ");

$oldtitle = $title = '';

while ($row = $stmt->fetch()){
    $title= $row['title'];

    if ( $oldtitle == $title ) {
        $title = '';
    } else {
        $oldtitle = $title;
    }

    $genre = $row['genre'];
    $people = $row['people'];
    ?>
        <h1> <?php echo $title ; ?> </h1>
        <h1> <?php echo $genre ; ?> </h1>
        <h1> <?php echo $people ; ?> </h1>
    <?php 
} 
?>

我想要的输出是:

Snitch Action Drama Crime Dwayne Johnson Jason Douglas

但是,我收到一个致命错误:

Uncaught PDOException: 
SQLSTATE[21000]: Cardinality violation: 1222 The used SELECT statements have a different number of columns in C:\xampp\htdocs\new\single-movie-test.php:3 
Stack trace: #0 C:\xampp\htdocs\new\single-movie-test.php(3): 
PDO->query('\r\nSELECT * FROM...') #1 {main} thrown in C:\xampp\htdocs\new\single-movie-test.php on line 3

1 个答案:

答案 0 :(得分:1)

就像影子所说的,内部联接和group_concat是您所需要的

将您的选择语句更改为

item

这应该像一种魅力,因为有了这个数据库

$url = "http://rest.ebay.com/epn/v1/find/item.rss?keyword=Laptop%20&campaignid=5338607813%20&sortOrder=BestMatch%20&programid=15";
$rss = simplexml_load_file($url);
$res = [];
foreach ($rss->channel->item as $item) {
    $e = $item->children('e', TRUE);
    $res[] = [
        'ebayLink' => $item->link,
        'ebayTitle' => $item->title,
        'ebayDescription' => $item->description,
        'ebayPrice' => $e->CurrentPrice
    ];
}
var_dump($res);

您得到这个结果

SELECT 
 mo.title title
 , GROUP_CONCAT(DISTINCT p.people) people
  , GROUP_CONCAT(DISTINCT ge.genre) genre
FROM 
  Movie mo
  inner join  movie_people mp 
    on mo.movie_id = mp.movie_id
  inner join people p 
    on mp.people_id = p.people_id
  inner join movie_genre mg
    on mg.movie_id = mp.movie_id
  inner join genre ge
    on ge.genre_id = mg.genre_id
 GrOUP By mo.movie_id,mo.title;

我添加了第二部电影只是为了演示它正常工作