Group_concat双重结果

时间:2013-01-24 07:57:52

标签: php mysql

我一直在处理运行以下查询的应用程序:

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运行查询时,它会返回以下结果(例如:)

enter image description here

在我的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(),但我想知道问题的根源。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分: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
相关问题