Php 用于显示多对多数据库结果的MySQL语法
我创建了一个多对多数据库,如下所示:Php 用于显示多对多数据库结果的MySQL语法,php,mysql,sql,syntax,many-to-many,Php,Mysql,Sql,Syntax,Many To Many,我创建了一个多对多数据库,如下所示: 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_Ambi
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);
╔════════╦════╦══════════╗
║ Title ║ id ║ Ambience ║
╠════════╬════╬══════════╣
║ film_1 ║ 1 ║ Funny,Sad║
║ film_2 ║ 2 ║ Funny,Sad║
╚════════╩════╩══════════╝
现在:我插入了一些数据并加入了表以获得:
╔════════╦════╦══════════╗
║ Title ║ id ║ Ambience ║
╠════════╬════╬══════════╣
║ film_1 ║ 1 ║ Funny ║
║ film_1 ║ 1 ║ Sad ║
║ film_2 ║ 2 ║ Funny ║
║ film_2 ║ 2 ║ Sad ║
╚════════╩════╩══════════╝
但是,我的目标是在一行显示胶片_1,在第二行显示胶片_2,如下所示:
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);
╔════════╦════╦══════════╗
║ Title ║ id ║ Ambience ║
╠════════╬════╬══════════╣
║ film_1 ║ 1 ║ Funny,Sad║
║ film_2 ║ 2 ║ Funny,Sad║
╚════════╩════╩══════════╝
我正试图使用GROUP_CONCAT
,但我得到了:
╔════════╦════╦════════════════════════╗
║ Title ║ id ║ Ambience ║
╠════════╬════╬════════════════════════╣
║ film_1 ║ 1 ║ funny, funny, sad, sad ║
╚════════╩════╩════════════════════════╝
它将所有行合并为一行。
这里有一个。您需要添加
分组依据:
SELECT title,
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
结果是:
TITLE AMBIENCES
film1 sad happy
film2 sad happy
这很简单:D.谢谢你的帮助@mishik!