Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wyświetlanie danych z tabeli, relacja wiele do wielu
marekc12
post
Post #1





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 1.08.2008

Ostrzeżenie: (0%)
-----


Witam wszystkich,

dajmy na to mam takie przykładowe tabele:

(IMG:http://img812.imageshack.us/img812/8028/tables.png)

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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Dla każdego filmu oddzielnie pobrać aktorów
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@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
Go to the top of the page
+Quote Post
marekc12
post
Post #4





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 1.08.2008

Ostrzeżenie: (0%)
-----


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ę ?

Ten post edytował marekc12 16.08.2010, 10:55:38
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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......)
Go to the top of the page
+Quote Post
marekc12
post
Post #6





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 1.08.2008

Ostrzeżenie: (0%)
-----


Ok. Ale pomyślę nad tym LEFT JOIN, bo chciałem się nauczyć pobierać te dane w najlepszy sposób.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Z drugiej strony, jeśli będziesz korzystał ze stronicowania tych filmów, to jednak to co zaproponowales może okazać się lepsze.
Go to the top of the page
+Quote Post
marekc12
post
Post #8





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 1.08.2008

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował marekc12 16.08.2010, 12:04:21
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 10:38