2014-10-29 46 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 
相關問題