2016-12-10 7 views
0

私は3つのテーブル:movie,actorおよびmovie_actor_mappingを持っています。そして、テーブルムービーとグループアクターから各ムービーのデータを選択するクエリを作成しました。しかしその後、別のテーブルmovie_player_episode_mappingplayerを追加し、ムービーで使用できるシーズンを選択してグループ化するためにクエリを変更する必要があります。たとえば、テーブルmovie_player_episode_mappingmovie_id = 1の季節1と2が含まれている場合は、文字列1,2を取得する必要があります。2つのMySQLテーブルから選択したときのエラー

だから、私のテーブル:

CREATE TABLE `movie` (
    `movie_id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(50) DEFAULT NULL, 
    `rating` float(2,1) DEFAULT NULL, 
    PRIMARY KEY (`movie_id`), 
    UNIQUE KEY `title` (`title`) 
) 

CREATE TABLE `actor` (
    `actor_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `name` varchar(40) DEFAULT NULL, 
    PRIMARY KEY (`actor_id`), 
    UNIQUE KEY `name` (`name`) 
) 

CREATE TABLE `movie_actor_mapping` (
    `movie_actor_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `movie_id` int(10) UNSIGNED DEFAULT NULL, 
    `actor_id` int(10) UNSIGNED DEFAULT NULL, 
    PRIMARY KEY (`movie_actor_id`), 
    UNIQUE KEY `movie_actor_id` (`movie_actor_id`) 
) 

そして、私のクエリ:

SELECT title, group_concat(a.name separator ', ') as actors 
FROM movie m 
INNER JOIN movie_actor_mapping ma ON m.movie_id = ma.movie_id 
INNER JOIN actor a ON a.actor_id = ma.actor_id 
WHERE m.rating IS NOT NULL 
GROUP BY m. movie_id 
ORDER BY m.rating DESC; 

もう私の二つのテーブル:

CREATE TABLE `movie_player_episode_mapping` (
    `movie_id` int(11) UNSIGNED, 
    `season` tinyint(11) UNSIGNED, 
    `episode` tinyint(11) UNSIGNED, 
    `player_id` tinyint(11) UNSIGNED, 
    `path` TEXT 
); 

CREATE TABLE `player` (
    `player_id` int(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    `hostname` VARCHAR(30), 
    `name` VARCHAR(30), 
    UNIQUE KEY `name` (`name`) 
); 

は、私はこのように私のクエリを変更してみました:

SELECT title, group_concat(a.name separator ', ') as actors, group_concat(mpe.season separator ', ') as seasons 
    FROM movie m, movie_player_episode_mapping mpe 
    INNER JOIN movie_actor_mapping ma ON m.movie_id = ma.movie_id 
    INNER JOIN actor a ON a.actor_id = ma.actor_id 
    WHERE m.rating IS NOT NULL 
    GROUP BY m. movie_id 
    ORDER BY m.rating DESC; 

しかし、私にはエラーがあります:[42S22][1054] Unknown column 'm.movie_id' in 'on clause'

私は次のクエリも試しましたが、私の結果は間違っています。私movie_player_episode_mappingmovie_id=1のために1シーズンの行のみが含まれている場合たとえば、私はseasons: "1, 1, 1, 1, 1, 1, 1, 1, 1"を持っている代わりにseasons: "1"

SELECT title, group_concat(a.name separator ', ') as actors, group_concat(mpe.season separator ', ') as seasons 
FROM movie m 
INNER JOIN movie_player_episode_mapping mpe ON m.movie_id = mpe.movie_id 
INNER JOIN movie_actor_mapping ma ON m.movie_id = ma.movie_id 
INNER JOIN actor a ON a.actor_id = ma.actor_id 
WHERE m.rating IS NOT NULL 
GROUP BY m. movie_id 
ORDER BY m.rating DESC; 

どこで私のミスと私はそれをどのように修正することができますか?

+0

は申し訳ありません...あなたを助けることができるかもしれないが、あなたはあなたが投稿最後のクエリを実行するときに、あなたが投稿エラーメッセージが出ていることを確認してください_really_ていますか? 'tv_id'という列はテーブルの作成には表示されず、クエリでも使用されません。 – arkascha

+0

うん。そのエラーメッセージは、別のクエリに関連しています。とにかく、コンマ結合構文を使用しないでください。特に、決して構文を混ぜ合わせてはいけません。 – Strawberry

+0

@arkascha申し訳ありません、私のエラーメッセージ – rel1x

答えて

0
SELECT title, group_concat(a.name separator ', ') as actors, group_concat(mpe.season separator ', ') as seasons 
FROM movie m 
INNER JOIN movie_actor_mapping ma ON m.movie_id = ma.movie_id 
INNER JOIN actor a ON a.actor_id = ma.actor_id, movie_player_episode_mapping, mpe 
WHERE m.rating IS NOT NULL 
GROUP BY m. movie_id 
ORDER BY m.rating DESC; 

が、これはあなたの最後のクエリ

+0

こんにちは!ありがとうございます。私の 'movie_player_episode_mapping'に1シーズンの' movie_id = 1'行のみが含まれている場合は、シーズンがあります: "1,1,1,1,1,1,1,1,1"代わりに季節: "1" – rel1x

関連する問題