Как я могу отображать каждый фильм только один раз?

В настоящее время я использую 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>
<br><br>
";

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

С приведенным выше кодом я получаю следующее:

«Следующие фильмы соответствуют значению фильтра:« choco ».

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

Когда я получу это:

BUTTERFLY CHOCOLAT звезды ED GUINESS, MARY KEITEL, LISA MONROE, NICK STALLONE, BURT TEMPLE, MENA TEMPLE

ШОКОЛАД ГАРРИ звезды RIP CRAWFORD, JANE JACKMAN, ... ...

Я пробовал SELECT DISTINCT, но это только усложняет его.

php,mysql,

0

Ответов: 2


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>
" . 
"<br>
";

0

Вы должны сгруппировать результаты по названию фильма. Используйте предложение «Group By» перед предписанием «Заказ», которое вы использовали.

PHP, MySQL,
Похожие вопросы