Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyświetlenie wierszy jako kolumny.
marnieq
post 28.01.2013, 09:20:32
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.01.2013

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


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.
Go to the top of the page
+Quote Post
Sephirus
post 28.01.2013, 09:28:41
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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.

Ten post edytował Sephirus 28.01.2013, 09:30:40


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
marnieq
post 28.01.2013, 09:35:34
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.01.2013

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


użycie PHP odpada, ponieważ muszę mieć to zrobione wszystko z poziomu zapytania MySql
Go to the top of the page
+Quote Post
nospor
post 28.01.2013, 09:44:06
Post #4





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




Zapytanie jakie podał ci Sephirus jest jedyne słuszne. Lepiej już tego raczej nie zrobisz.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Sephirus
post 28.01.2013, 09:45:56
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


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...


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
wiiir
post 28.01.2013, 18:20:50
Post #6





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

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


podobny temat

http://forum.php.pl/index.php?s=&showt...t&p=1019866
Go to the top of the page
+Quote Post
bpskiba
post 28.01.2013, 18:54:39
Post #7





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


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

Ten post edytował bpskiba 28.01.2013, 18:59:00
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: 14.08.2025 - 12:04