2 つの多対多の関係「構造」を確立しました。1 つは映画とそのアンビエンス用です。
CREATE TABLE Films (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
Title VARCHAR(255));
CREATE TABLE Ambiences (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
ambienceName VARCHAR(255));
CREATE TABLE Films_Ambiences (
film_id INT NOT NULL,
ambience_id INT NOT NULL,
PRIMARY KEY (film_id, ambience_id),
FOREIGN KEY (film_id) REFERENCES Films(id) ON UPDATE CASCADE,
FOREIGN KEY (ambience_id) REFERENCES Ambiences(id) ON UPDATE CASCADE);
2 つ目は、映画とその詳細に関するものです。
CREATE TABLE Specifics (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
specificName VARCHAR(255));
CREATE TABLE Films_Specifics (film_id INT NOT NULL,
specific_id INT NOT NULL,
PRIMARY KEY (film_id,specific_id),
FOREIGN KEY (film_id)
REFERENCES Films(id) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (specific_id)
REFERENCES Specifics(id) ON UPDATE CASCADE ON DELETE CASCADE);
すべての結果を 1 つのテーブルに表示したい (映画のタイトルでグループ化)。言い換えれば、私は欲しい:
+------+--------------+-----------------+ | | タイトル | 雰囲気 | 仕様 | +------+--------------+-----------------+ | | フィルム1 | 面白い、怖い | エイリアン | | | フィルム2 | 悲しい、怖い | 騎士、エイリアン | | | フィルム3 | 面白い | 騎士 | | | . | | | | | | | | . | | | | | | | | . | | | | | | +------+--------------+-----------------+
アンビエンスのみで、次のようにいくつかの JOIN と GROUP_CONCAT を使用しました。
SELECT *,GROUP_CONCAT(ambienceName SEPARATOR ', ') AS ambiences
FROM Films AS f
INNER JOIN Films_Ambiences as fa ON f.id = fa.film_id
INNER JOIN Ambiences AS a ON a.id = fa.ambience_id
GROUP BY Title
アンビエンスと詳細については、2 つの GROUP_CONCAT を使用してみましたが、うまくいきませんでした。
必要に応じて、ここにSQLFiddleがあります。
ここでの追加の質問は、多対多の「構造」が 3 つ以上ある場合、それは意味があるかということです。
アップデート
詳細のない映画も展示したいと思います。@Kickstart によって提案されたソリューションには、それが含まれていないようです。
つまり、具体的ではあるが具体性のない映画を展示したいfunny, sad
。これが更新されたSQLFiddle です- film4 が選択されていないことがわかります。