Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyświetlanie danych z tabeli, relacja wiele do wielu
Forum PHP.pl > Forum > Bazy danych > MySQL
marekc12
Witam wszystkich,

dajmy na to mam takie przykładowe tabele:



Każdy film może mieć wielu aktorów. Chciałbym wyświetlić spis filmów z grającymi w nich aktorami. Czy ktoś mi podpowie jak powinienem to zrobić (PHP + MySQL) ?

pozdrawiam smile.gif
wookieb
Dla każdego filmu oddzielnie pobrać aktorów
nospor
@wookieb wg. Twojego sposobu będzie więc tyle dodatkowych zapytań ile będzie filmów.
A to można jednym zapytaniem zrobić:
http://nospor.pl/grupowanie-wynikow.html
marekc12
ale w moim przykładzie jest relacja wiele do wielu, tzn. film posiada więcej niż jednego aktora i aktor posiada więcej niż jeden film. To chyba jednym zapytaniem tego ładnie nie pobiorę właśnie ...

Ale myślałem, żeby pobrać najpierw wybrane filmy, a później zrobić zapytanie, które pobierze mi aktorów, którzy grali w pobranych przeze mnie filmach:
  1. SELECT a.name, fa.film_id FROM actor AS a, film_actor AS fa WHERE fa.actor_id = a.id AND (fa.film_id = 1 OR fa.film_id = 2 OR fa.film_id = 3 OR ..... )

gdzie 1,2,3,... to id filmów które wyświetlam. To by mi pobrało wszystkich aktorów związanych z tymi filmami. Co myślicie?

Poza tym film, film miałby więcej takich powiązań, np. może mieć wielu reżyserów, itd. Także wychodziło by dla każdego powiązania dodatkowe zapytanie. Ale chyba krócej tego nie zrobię ?
nospor
Cytat
ale w moim przykładzie jest relacja wiele do wielu, tzn. film posiada więcej niż jednego aktora i aktor posiada więcej niż jeden film. To chyba jednym zapytaniem tego ładnie nie pobiorę właśnie ...
To, że w przykladzie pokazałem jak pobrać dane z dwoch tabel nie oznacza, ze nie mozesz ich pobrac z trzech... Idea jest ta sama. Jedyne co musisz zrobic to o jednego więcej LEFT JOIN.

Cytat
Ale myślałem, żeby pobrać najpierw wybrane filmy, a później zrobić zapytanie, które pobierze mi aktorów, którzy grali w pobranych przeze mnie filmach:
[SQL] pobierz, plaintext
SELECT a.name, fa.film_id FROM actor AS a, film_actor AS fa WHERE fa.actor_id = a.id AND (fa.film_id = 1 OR fa.film_id = 2 OR fa.film_id = 3 OR ..... )

gdzie 1,2,3,... to id filmów które wyświetlam. To by mi pobrało wszystkich aktorów związanych z tymi filmami. Co myślicie?
Tez moze byc.
Tylko zamiast:
fa.film_id = 1 OR fa.film_id = 2 OR fa.film_id = 3 OR .....
zrob poprostu
fa.film_id in (1,2,3......)
marekc12
Ok. Ale pomyślę nad tym LEFT JOIN, bo chciałem się nauczyć pobierać te dane w najlepszy sposób.
nospor
Z drugiej strony, jeśli będziesz korzystał ze stronicowania tych filmów, to jednak to co zaproponowales może okazać się lepsze.
marekc12
No teraz chyba też tak myślę. Teraz będę myślał jak obsłużyć takie tabelki w Symfony. Pomęczę się sam, jak nie zrobię to już będę pytał na subforum frameworkowym.

pozdrawiam smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.