widmo_91
16.01.2014, 01:42:11
Robie export dość dużej struktury do pliku xls.
Mój problem w dużym uproszczeniu przedstawia się następująco:
Są sobie 3 tabele i relacja wiele do wielu:
Tabela użytkownicy:
id | nazwisko
---------------
1 | Nazw1
---------------
2 | Nazw2
---------------
3 | Nazw3
Tabela produkty:
id | nazwa
---------------
1 | Prod1
---------------
2 | Prod2
---------------
3 | Prod3
Oraz tabela pośrednia koszyk
uzytkownik_id | produkt_id | liczba_sztuk
Chcialbym uzyskać z tego strukturę:
uzytkownik_id | nazwisko | Prod1 | Prod2 | Prod3 | ...itd
----------------------------------------------------------------
1 | Nazw1 | 0 | 3 | 2 | ....
----------------------------------------------------------------
2 | Nazw2 | 0 | 0 | 1 | ....
Potrzebuję elastycznego rozwiązania nie zależnego od liczby produktów i ich nazw.
mmmmmmm
16.01.2014, 08:29:39
PIVOT
widmo_91
16.01.2014, 14:29:53
Jest to zadanie w ogóle wykonalne w stary dobrym strukturalnym sqlu?
mmmmmmm
16.01.2014, 18:58:37
Ale jaki SQL to juz nie napiszesz...
Prod1, prod2, .. to skończona lista, czy nie?
widmo_91
16.01.2014, 22:17:29
Standardowo chodzi o MySQL.
Tabela produkty to nieskończona lista i nie da się tego w prosty sposób załatwić aliasami i LEFT JOINami
Próbowałem tę tabele potraktować jako skończoną listę i wygenerować cześć kodu sql za pomocą pętli. Jednak wtedy już dla 30 produktów wyszły mi czasy rzędu kilku sekund tak, że dużo szybciej jest puścić zapytania w pętli bo w sumie i tak na jedno wyszło.
Z tego co czytałem to da się to zrobić np. w oracle, postgre, ms sql. W mysql nie mogłem się doszukać składni pivot.
mmmmmmm
17.01.2014, 00:19:30
Trzeba zrobic to mniej więcej tak jak tu:
http://sqlfiddle.com/#!2/d020b/2Ten case w środku jest kluczowy
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.