2016-10-12 4 views
0

Я использую mySQL в PHP. Моя задача - перечислить всех участников для каждого фильма, который появляется из определенного поиска. Поиск и результаты работают нормально. Однако мне нужно изменить отображение результатов.Как я могу отображать каждый фильм только один раз?

$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"; 
} 

С выше коде, я получаю это:

«Следующие фильмы соответствуют значения фильтра: " Choco"

BUTTERFLY CHOCOLAT звезды НИК Сталлоне
BUTTERFLY CHOCOLAT звезды MENA ХРАМ
BUTTERFLY CHOCOLAT звезды КИМ ALLEN
BUTTERFLY CHOCOLAT звезды LISA Monroe
ButterFly Chocolat звезды ED Гинесса
BUTTERFLY Chocolat звезды Берт ХРАМ
BUTTERFLY CHOCOLAT звезды MARY Кейтель
CHOCOLAT ГАРРИ звезды JOE Суонк
CHOCOLAT ГАРРИ звезды RIP КРОУФОРД
CHOCOLAT ГАРРИ звезды KIRK Йовович
... ... "

When Я должен получать это:

BUTTERFLY Chocolat звезды ED Гинесса, МЭРИ Кейтель, LISA MONROE, НИК Сталлоне, Берт ХРАМ, MENA ХРАМ

ШОКОЛАД ГАРРИ звезды 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 Film & затем использовать функцию 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» только до предложение «Заказать», которое вы использовали.

Смежные вопросы