我正在编写一个程序,以获取电影的流派。
样本数据库:
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
答案 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;
我添加了第二部电影只是为了演示它正常工作