私は3つのテーブル:movie
,actor
およびmovie_actor_mapping
を持っています。そして、テーブルムービーとグループアクターから各ムービーのデータを選択するクエリを作成しました。しかしその後、別のテーブルmovie_player_episode_mapping
とplayer
を追加し、ムービーで使用できるシーズンを選択してグループ化するためにクエリを変更する必要があります。たとえば、テーブルmovie_player_episode_mapping
にmovie_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_mapping
がmovie_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;
どこで私のミスと私はそれをどのように修正することができますか?
は申し訳ありません...あなたを助けることができるかもしれないが、あなたはあなたが投稿最後のクエリを実行するときに、あなたが投稿エラーメッセージが出ていることを確認してください_really_ていますか? 'tv_id'という列はテーブルの作成には表示されず、クエリでも使用されません。 – arkascha
うん。そのエラーメッセージは、別のクエリに関連しています。とにかく、コンマ結合構文を使用しないでください。特に、決して構文を混ぜ合わせてはいけません。 – Strawberry
@arkascha申し訳ありません、私のエラーメッセージ – rel1x