2014-10-29 137 views
0

我有数据库,可以对电影和演员进行评分。我需要选择电影和所有这些演员的标题。我创建一个查询:电影的SELECT标题以及此电影的所有演员

SELECT movies.title, CONCAT_WS(' ', actors.name, actors.surname) as Actor FROM movies    LEFT JOIN movies_actors 
ON movies.id = movies_actors.movie_id 
LEFT JOIN actors 
ON actors.id = movies_actors.actor_id 

而我得到的东西:

+------------------------------+--------------+ 
| title      | actor  | 
+------------------------------+--------------+ 
| Sin City: A Dame to Kill For | Eva Green | 
| Sin City: A Dame to Kill For | Bruce Willis | 
+------------------------------+--------------+ 

但我想要得到的东西:我尝试使用

SELECT DISTINCT movies.title... 

+------------------------------+--------------+ 
| title      | actor  | 
+------------------------------+--------------+ 
| Sin City: A Dame to Kill For | Eva Green | 
|        | Bruce Willis | 
+------------------------------+--------------+ 

但它没有帮助。

你能帮我吗?谢谢! 这是我的数据库

CREATE TABLE movies ( 
    id int NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    title VARCHAR(255), 
    director VARCHAR(255), 
    created DATE, 
    budget DECIMAL(12,2), 
    box_office DECIMAL(13,2), 
    duration TIME 
) 

CREATE TABLE actors (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    surname VARCHAR(255), 
    name VARCHAR(255), 
    birthday DATE 
) 

ALTER TABLE movies_actors 
    ADD FOREIGN KEY (movie_id) REFERENCES movies (id) 
ALTER TABLE movies_actors 
    ADD FOREIGN KEY FOREIGN KEY (actor_id) REFERENCES actors (id) 

INSERT INTO 'movies' 
    (`id`, `title`, `director`, `created`, `budget`, `box_office`, `duration`) 
VALUES 
    (1, 'Sin City: A Dame to Kill For', 'Frank Miller, Robert Anthony Rodriguez',       '2014', 62000000.00, 38000000.00, '01:42:00') 

INSERT INTO `actors` 
    (`id`, `surname`, `name`, `birthday`) 
VALUES 
    (1, 'Green', 'Eva', '1980-07-06'), 
    (2, 'Willis', 'Bruce', '1955-03-19') 

回答

0

如何GROUP_CONCAT()

SELECT movies.title, 
     GROUP_CONCAT(concat(actors.name, ' ', actors.surname)) as Actors 
FROM movies     
LEFT JOIN movies_actors ON movies.id = movies_actors.movie_id 
LEFT JOIN actors ON actors.id = movies_actors.actor_id 
GROUP BY movies.title 
0

后加入,你总会得到结果的foreach列单元格,如果存在有效的值。所以,当你在连接中找到2个有效的演员时,标题将重复2次,正如你已经注意到的那样。

+------------------------------+--------------+ 
| title      | actor  | 
+------------------------------+--------------+ 
| Sin City: A Dame to Kill For | Eva Green | 
| Sin City: A Dame to Kill For | Bruce Willis | 
+------------------------------+--------------+ 

你可以Concat的对于演员和组按标题OFC的结果,得到的东西是这样的:

+------------------------------+-------------------------+ 
| title      | actor     | 
+------------------------------+-------------------------+ 
| Sin City: A Dame to Kill For | Eva Green,Bruce Willis | 
+------------------------------+-------------------------+ 

SELECT 
    movies.title, 
    GROUP_CONCAT(concat(actors.name, ' ', actors.surname)) as Actor 
FROM 
    movies     
LEFT JOIN 
    movies_actors ON movies.id = movies_actors.movie_id 
LEFT JOIN 
    actors ON actors.id = movies_actors.actor_id 
GROUP BY movies.title 
相关问题