我一直在处理运行以下查询的应用程序:
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()
,但我想知道问题的根源。
基本上当我手动运行查询时,类型显示正常,当它在应用程序中运行时,它显示为double,而其余信息仍显示正常。
答案 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