2016-10-12 39 views
0

我目前在PHP中使用mySQL。我的任務是列出來自給定搜索的每部電影的所有演員。搜索和結果正常工作。但是,我需要更改結果的顯示。我怎樣才能顯示每個電影標題只有一次?

$sql = "SELECT f.title, a.first_name, a.last_name 
    FROM film as f, actor as a, film_actor as fa 
    WHERE (f.title LIKE \"%$filter%\") 
    AND fa.actor_id = a.actor_id 
    AND f.film_id = fa.film_id 
    ORDER BY f.title;"; 

$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
echo "The following movies match the filter value: &quot$filter&quot." . "</strong>" . 
    "</div>\n<br><br>\n"; 

// output data of each row 
while(($row = $result->fetch_assoc())) { 
    echo 
    $row["title"] . " " . "stars" . " " . 
    $row["first_name"] . " " . 
    $row["last_name"] . 
    "</div>\n" . 
    "<br>\n"; 
} 
} else { 
echo "0 results"; 
} 

與上面的代碼,我得到這個:

「下面的電影過濾器值相匹配: 「巧克力」

BUTTERFLY CHOCOLAT明星史泰龍NICK
BUTTERFLY CHOCOLAT明星MENA TEMPLE
BUTTERFLY CHOCOLAT明星KIM ALLEN
BUTTERFLY CHOCOLAT明星LISA MONROE
BUTTERFLY CHOCOLAT明星ED吉尼斯
BUTTERFLY CHOCOLAT明星BURT TEMPLE
BUTTERFLY CHOCOLAT星級瑪麗·凱特爾
CHOCOLAT HARRY明星JOE SWANK
CHOCOLAT HARRY明星RIP CRAWFORD
CHOCOLAT HARRY明星KIRK喬沃維奇
... ......「

當我應該得到這個:

BUTTERFLY CHOCOLAT stars ED GUINESS,MARY KEITEL,LISA MONROE,NICK STALLONE,BURT TEMPLE,MENA TEMPLE

巧克力HARRY明星RIP CRAWFORD,JANE傑克曼 ... ...

我試過SELECT DISTINCT但僅使得它更加複雜。

+2

看看SQL的 「GROUP BY」 功能。 http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat – arkascha

回答

1

您需要GROUP BY電影&然後使用Group_Concat功能

$sql = "SELECT f.title, group_concat(concat(a.first_name, " ", a.last_name)) ActorNames 
FROM film as f, actor as a, film_actor as fa 
WHERE (f.title LIKE \"%$filter%\") 
AND fa.actor_id = a.actor_id 
AND f.film_id = fa.film_id 
GROUP BY f.title 
ORDER BY f.title;"; 

和修改環路

while(($row = $result->fetch_assoc())) { 
echo 
$row["title"] . " " . "stars" . " " . 
$row["ActorNames"] . " " . 
"</div>\n" . 
"<br>\n"; 
0

您必須按照電影名稱對結果進行分組。使用'Group By'子句之前的'Order By'子句。

相關問題