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

解決しました。問題はクエリにありました。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 に答える
0

適切な映画 ID でグループ化していますか? それが、すべてのジャンルを 1 つにまとめている理由かもしれません。

于 2013-01-24T07:59:57.527 に答える