3

我一直在开发一个运行以下查询的应用程序:

SELECT m.*, GROUP_CONCAT(g.title) as genres
FROM movie m
INNER JOIN genre_movie gm ON gm.movie_id = m.id
INNER JOIN genre g ON gm.genre_id = g.id
WHERE m.imdb_id = '454876'

当我在查询浏览器中运行查询或直接通过 SSH 运行查询时,它会返回以下结果(示例:)

在此处输入图像描述

在我的 PHP 代码中,我执行以下操作来遍历流派:

<?php $get =  mysql_query($query); // $query is the above query ?>
<?php $movieInfo = mysql_fetch_assoc($get); ?>
<?php $genres = explode(",", $movieInfo['genres']); ?>
<?php foreach ($genres as $genre) { ?>
    <li class="clear"><a><span class="value"><?php echo $genre; ?></span></a></li>
<?php } ?>

虽然预期的结果是:

剧情、冒险

输出是:

戏剧,戏剧,戏剧,冒险,冒险,冒险

知道为什么会发生这种情况,因为我无法弄清楚吗?

PS:我知道一种解决方法是array_unique()在我爆炸以逗号分隔的流派列表时添加,但我想知道问题的根源。

基本上,当我手动运行查询时,类型显示正常,当它在应用程序中运行时,它显示双倍,而其余信息仍然显示正常。

4

3 回答 3

1

似乎您忘记了 SQL 中的GROUP BY子句,因此写入了重复记录。

于 2013-01-24T08:15:18.090 回答
0

您是否按正确的电影 ID 分组?这可能是您将所有类型归为一个的原因。

于 2013-01-24T07:59:57.527 回答
0

解决了,问题出在查询上,我忘了 GROUP BY:

SELECT m.*, GROUP_CONCAT(g.title) as genres
FROM movie m
INNER JOIN genre_movie gm ON gm.movie_id = m.id
INNER JOIN genre g ON gm.genre_id = g.id
WHERE m.imdb_id = '454876' GROUP BY m.id
于 2013-01-24T08:15:56.787 回答