是否可以在单个查询中合并 many-to-many 关系和 one-to-many 关系?
Is it possible to combine many-to-many relationships with one-to-many relationships in a single query?
我有一部 MOVIE table,其中包括与流派的多对多关系以及具有一对多关系的评论 table。又名,一部电影可以有多种类型,一种类型可以有很多电影。一部电影可以有很多评论。
我的问题是,当我试图显示数据库中的所有数据时,我想显示标题、相关流派,然后是所有评论。我似乎无法仅通过查询来做到这一点,所以我开始添加自己的逻辑,但这对我也不起作用。我一直在想,一定有某种方法可以将逻辑组合到一个查询中。
这是我目前的情况:
$query2 = "SELECT * FROM movie m
JOIN moviegenre mg ON m.id = mg.movieid
JOIN genre g ON g.id = mg.genreid
JOIN review r ON r.movieid = m.id
WHERE m.id = mg.movieid";
$title = "starting";
$display = true;
foreach ($db->query($query2) as $row2)
{
if ($title != $row2['title'])
{
$title = $row2['title'];
echo '<h2 id="title">' . $row2['title'] . " (" . $row2['year']
. ')<br/><hr/></h2><h4> <u>- Genres - </u><br/>';
$display = false;
}
echo $row2['name'] . ' <br/> ';
if ($display == false)
{
$display = true;
echo "<h4 id=\"rating\">" . $row2['rating'] . " stars<br/> " . $row2['subject'] . "<br/>" . "<h5 id=\"rating\">" . $row2['content'] . "</h5></h4>";
}
}
echo '</h4>';
这是结果。请注意,它只能包含一篇评论,而且格式非常难看。我知道这是非常丑陋的代码,只是我试图以迂回的方式修复错误。
夺宝奇兵 (1981)
- 流派 -
行动
5星
很棒的电影
这部电影永远不会过时
冒险
几天后我在阅读时找到了答案。我了解了联接并意识到它们正是我要找的东西。
我有一部 MOVIE table,其中包括与流派的多对多关系以及具有一对多关系的评论 table。又名,一部电影可以有多种类型,一种类型可以有很多电影。一部电影可以有很多评论。
我的问题是,当我试图显示数据库中的所有数据时,我想显示标题、相关流派,然后是所有评论。我似乎无法仅通过查询来做到这一点,所以我开始添加自己的逻辑,但这对我也不起作用。我一直在想,一定有某种方法可以将逻辑组合到一个查询中。
这是我目前的情况:
$query2 = "SELECT * FROM movie m
JOIN moviegenre mg ON m.id = mg.movieid
JOIN genre g ON g.id = mg.genreid
JOIN review r ON r.movieid = m.id
WHERE m.id = mg.movieid";
$title = "starting";
$display = true;
foreach ($db->query($query2) as $row2)
{
if ($title != $row2['title'])
{
$title = $row2['title'];
echo '<h2 id="title">' . $row2['title'] . " (" . $row2['year']
. ')<br/><hr/></h2><h4> <u>- Genres - </u><br/>';
$display = false;
}
echo $row2['name'] . ' <br/> ';
if ($display == false)
{
$display = true;
echo "<h4 id=\"rating\">" . $row2['rating'] . " stars<br/> " . $row2['subject'] . "<br/>" . "<h5 id=\"rating\">" . $row2['content'] . "</h5></h4>";
}
}
echo '</h4>';
这是结果。请注意,它只能包含一篇评论,而且格式非常难看。我知道这是非常丑陋的代码,只是我试图以迂回的方式修复错误。
夺宝奇兵 (1981)
- 流派 - 行动 5星 很棒的电影
这部电影永远不会过时
冒险
几天后我在阅读时找到了答案。我了解了联接并意识到它们正是我要找的东西。