Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Relacja wiele do wielu - jak wyciągnąć dane?
Nix1
post 23.09.2008, 22:34:59
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 23.09.2008
Skąd: Łódź

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


Witam

Mam bazę danych z różnymi imprezami (koncertami, wystawami...) i każda z nich może należeć do wielu kategorii.

w uproszczeniu:

tabela_imprezy
id_imprezy | nazwa_imprezy

tabela_kategorie
id_kategorii | nazwa_kategorii

tabela_x
id_imprezy | id_kategorii

Potrzebuję wyświetlić listę imprez tak, żeby przy każdej z nich były wypisane wszystkie kategorie do których dana impreza należy (taki efekt jak w Gmailu z etykietami przy tematach).

Czy da się to wyciągnąć w jednym zapytaniu?
Jeśli nie, to może jest jakiś lepszy sposób, niż wyciąganie listy kategorii dla każdej imprezy z osobna?

Nie żebym się jakoś bardzo przejmował wydajnością, ale wolałbym to zrobić poprawnie smile.gif

Z góry dzięki za pomoc i pozdrawiam!
Go to the top of the page
+Quote Post
jarek_bolo
post 23.09.2008, 23:18:59
Post #2





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

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


Jeśli chodzi Ci o to co myślę, że Ci chodzi to zerknij tutaj: http://forum.php.pl/index.php?showtopic=103003 smile.gif


--------------------
"Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! |
Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!!
Go to the top of the page
+Quote Post
sf
post 24.09.2008, 08:09:49
Post #3





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


@Nix1: najlepiej pobrać to najprostszym zapytaniem i w PHP w pętli pogrupować, czyli wyciągasz:

impreza 1, kategoria 1
impreza 1, kategoria 3
impreza 3, kategoria 2
impreza 3, kategoria 3

i ładnie w pętli obrabiasz, bo co z tego, że wyciągniesz w jakieś kolumnie np. kategoria 1, kategoria 2 skoro potem to i tak musisz najczęściej rozdzielać, a jeszcze więcej zabawy jak wyciągasz np. dwie kolumny (nazwę i id) lub więcej

Ten post edytował sf 24.09.2008, 08:10:55


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
Nix1
post 27.09.2008, 01:59:37
Post #4





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 23.09.2008
Skąd: Łódź

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


Niby OK, ale oba sposoby mają dwie zasadnicze wady.

Przede wszystkim - jeśli chcę wybrać tylko imprezy należące do jakiejś kategorii wtedy pozostałych kategorii w ogóle nie zobaczę. Chodzi np. o to, żeby po kliknięciu w etykietę pokazały się tylko imprezy z przypisaną tą etykietą, ale pozostałe etykiety danej imprezy mają być widoczne.

Drugi problem jest taki, że dodałem drugie podobne powiązanie (nazwijmy je 'typy'). Wtedy oba te sposoby troszkę się sypią - generują powtórki. Może by się to dało skryptem wyeliminować, ale w skrajnych przypadkach tych powtórek może wyjść naprawdę sporo.

Także chyba szukam dalej...

Ten post edytował Nix1 27.09.2008, 02:00:13
Go to the top of the page
+Quote Post
osiris
post 5.10.2008, 12:02:02
Post #5





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


  1. SELECT i.id_imprezy, i.nazwa_imprezy, GROUP_CONCAT(k.nazwa_kategorii SEPARATOR '|')
  2. FROM tabela_x AS x INNER JOIN tabela_imprezy AS i ON x.id_imprezy = i.id_imprezy
  3. INNER JOIN tabela_kategorie AS k ON x.id_kategorii = k.id_kategorii
  4. [WHERE x.id_kategorii = $id_kat]

to co masz w nawiasie kwadratowym to dodaj tylko jesli chcesz wyswietlic imprezy z danej kategorii
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 11:00