Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlenie wierszy jako kolumny.
Forum PHP.pl > Forum > Bazy danych > MySQL
marnieq
Witam. Mam problem z odpowiednim wyświetleniem danych ze swojej bazy. Posiadam 3 tabele.
Towar, Wlasnosc, Towar_wl.


Tabela towar posiada informacje o towarze oraz jego ID.
Wlasnosci to nazwa wlasnosci oraz ID zas towar_wl to tabela normalizujaca gdzie znajduje sie ID towaru, id wlasnosci oraz id wpisu.

Zatem tabele są następujące:

Towar
ID
Nazwa
Cena


Wlasnosc
ID
Nazwa



towar_wl
ID
ID_towar
ID_wlasnosc



Osiągnąć chcę tabele w postaci:

towar.nazwa | towar.cena | wlasnosc.nazwa | wlasnosc.nazwa | wlasnosc.nazwa | walsnosc.nazwa ....

Dany towar zawsze ma max 5 własności (zatem musze zawsze 5 wyświetlić), jednak nie wiem jak poprawnie połączyć te tabele. Najważniejsza jest wydajność (ponieważ w bazie będzie dużo wpisów).

Początkowo robiłem to z wykorzystaniem 5 JOIN'ow do tej samej tabeli lub poprzez dodane 5 SELECT'ow (dla każdej własności), jednak wydajność była bardzo słaba.

Proszę o pomoc.
Sephirus
Może to Cię nakieruje:

  1. SELECT t.nazwa, t.cena, GROUP_CONCAT(w.nazwa SEPARATOR ';') AS wlasnosci FROM Towar t
  2. JOIN towar_wl tw ON tw.id_towar = t.id
  3. JOIN Wlasnosc w ON w.id = tw.id_wlasnosc
  4. GROUP BY t.id


A potem w PHP jak dostaniesz wyniki:

  1. $results['wlasnosci']; // załóżmy, że tutaj mamy zwrócone pole własności
  2.  
  3. $wlasnosci = explode(';',$results['wlasnosci']);
  4.  
  5. // i tak dalej...


EDIT: Jeśli chciałbyś osiągnąć od razu taką strukturę to wydaje mi się, że zostają Ci jedynie te nieszczęsne wspomniane joiny smile.gif Sprawdź też czy wszystkie pola id* mają odpowiednie indeksy.
marnieq
użycie PHP odpada, ponieważ muszę mieć to zrobione wszystko z poziomu zapytania MySql
nospor
Zapytanie jakie podał ci Sephirus jest jedyne słuszne. Lepiej już tego raczej nie zrobisz.
Sephirus
No to pozostaje Ci jedynie jakaś procedura albo te joiny nieszczęsne...

Możesz ewentualnie spróbować (w sensie czysto spróbować - dla zabawy) zamiast joinów dać podzapytania dla każdej z własności ale to nie powinno być wydajniejsze...
wiiir
podobny temat

http://forum.php.pl/index.php?s=&showt...t&p=1019866
bpskiba
Mogę się dowiedzieć czemu joiny mają być nieszczęsne??
Spadek wydajności świadczy o problemach z indexami. Przy właściwych indexach złączenia nie obniżają wydajności
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-2024 Invision Power Services, Inc.