Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kwerenda krzyżowa z jednej tabeli
ze4lot
post
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 1
Dołączył: 29.03.2007
Skąd: Kraków

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


Witam

Posiadam tabelę 'sub_order' (sub_order_Id | tool_id | client_id)
oraz dwie tabele 'tools' (tool_id, tool_name) oraz 'clients' (client_id, client_name).

Potrzebuję stworzyć zapytanie sql tak aby wygenerowało mi tabelę krzyżową, gdzie kolumny to elementy tool_name, a wiersze to elementy client_name. Na skrzyżowaniach suma wierszy gdzie pojawiają się tool_id z tlient_id.
Generalnie chodzi o zaprezentowanie ile danych narzędzi kupili poszczególni klienci.

Bardzo proszę o pomoc w stworzeniu zapytania, a szczególnie będę wdzięczny jeśli ktoś poda jakiś ciekawy link z wyjaśnieniem podobnego problemu.


--------------------
ze4lot.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  1. SELECT
  2. client_id,
  3. Count(CASE WHEN tool_id=1 THEN order_id END) tool1,
  4. Count(CASE WHEN tool_id=2 THEN order_id END) tool2,
  5. Count(CASE WHEN tool_id=3 THEN order_id END) tool3,
  6. ...
  7. FROM
  8. sub_order
  9. GROUP BY client_id
Go to the top of the page
+Quote Post
ze4lot
post
Post #3





Grupa: Zarejestrowani
Postów: 54
Pomógł: 1
Dołączył: 29.03.2007
Skąd: Kraków

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


@mmmmmmm

Dzięki za pomoc ale szukam rozwiązania gdzie ilość unikalnych elementów tool oraz client jest nieznana.

EDIT:

Dla lepszego zrozumienia o co mi chodzi poniżej moja wizja tego co powinno zwrócić zapytanie:
  1. ______| maciek | michał | tomek | ...
  2. bułka | 3 | 0 | 6 | ...
  3. banan | 3 | 2 | 2 | ...
  4. masło | 1 | 4 | 1 | ...
  5. ... | ... | ... | ... | ...


Ten post edytował ze4lot 24.06.2013, 13:40:13


--------------------
ze4lot.pl
Go to the top of the page
+Quote Post
bpskiba
post
Post #4





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

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


Przykro mi, ale MySQL nie posiada gotowej funkcji tworzącej tebele przestawne.
Taki mechanizm istnieje w produktach Microsoftu czyli MSSQL. Jest to funkcja PIVOT
Oczywiście, w MySQL da się to również wykonać, ale trzeba napisać np. własną funkcję...

W googlach pod hasłem mysql pivot znajdziesz trochę pomysłów, ale wszystkie mają swoje dobre i złe strony.
Swoją drogą może php.net zaproponuje konkurs na napisanie takiej uniwersalnej funkcji





(konkurs może być z nagrodami)

Ten post edytował bpskiba 24.06.2013, 18:17: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 Aktualny czas: 20.08.2025 - 06:31