Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Grupowanie po 2 polach.
metalog
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 19.07.2006

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


Witam.
Mam problem.
Jest system w którym są zadania dla ludzi w firmie.
Lecz jedno zadanie może być przypisane 2 osobą.

Problem jest w generowaniu raportów.
Przedstawię w skrócie tabelę zadania.
Zadania -> id_user1,id_user2, zajeta_ilosc_godzin_pierwszego_usera,zajeta_ilosc_godzin_2usera,cena_sprzedazy

Przy generowaniu informacji dla 1 usera niema problemu. (zajeta_ilosc_godzin_pierwszego_usera i cena_sprzedazy)
i 2 zapytanie tak samo dla 2 usera

Wie ktoś może jak stworzyć raport dla pierwszego i 2 usera razem?
Czyli zeby wynik był:

user1 -> zajeta_ilosc_godzin + ile zarobił
user2 -> zajeta_ilosc_godzin + ile zarobil

ile zarobil jest liczone razem dla 2 userów.

Dla pierwszego usera liczę to tak:

select login,sum(ilosc_godzin),sum(cena) from zadania z left join users u on(z.idu=u.id) group by u.login

i osobno dla drugiego

select login,sum(ilosc_godzin),sum(cena) from zadania z left join users u on(z.idu2=u.id) group by u.login

Jak przerobić te 2 zapytania w jedno?

PS: user_1 i user_2 może wystąpić jako pierwszy i 2 uzytkownik.

Pomożę ktoś? (wiem troche namieszalem w poscie...)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
kefirek
post
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


  1. SELECT * FROM (
  2. (SELECT login, SUM(ilosc_godzin) AS ile, SUM(cena) AS suma FROM zadania z LEFT JOIN users u ON (z.idu=u.id) GROUP BY u.login)
  3. UNION ALL
  4. (SELECT login, SUM(ilosc_godzin) AS ile, SUM(cena) AS suma FROM zadania z1 LEFT JOIN users u1 ON (z1.idu2=u1.id) GROUP BY u1.login)
  5. ) AS tabela


Ten post edytował kefirek 20.03.2009, 17:15:22
Go to the top of the page
+Quote Post
metalog
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 1
Dołączył: 19.07.2006

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


  1. SELECT login, SUM(ilosc_godzin) AS ile, SUM(cena) AS suma FROM zadania z LEFT JOIN users u ON (z.idu=u.id) GROUP BY u.login UNION
  2. SELECT login, SUM(ilosc_godzin) AS ile, SUM(cena) AS suma FROM zadania z1 LEFT JOIN users u1 ON (z1.idu2=u1.id) GROUP BY u1.login

chodzi mi bardziej o coś podobnego do tego wyżej lecz.. żeby wyniki sie sumowały wtedy nie było by podwójnych wpisów
czyli żeby wynik był zamiast
Np: login test;
test,2,2000
test,4,1000

powinno być jeden wynik test:
test,6,3000

Ten post edytował metalog 23.03.2009, 09:36:24
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Użyj konstrukcji *:
  1. SELECT t.* FROM (podzapytanie) t;

O ile nigdzie się nie machnąłem to powinno działać:
  1. SELECT t.login, SUM(t.ile), SUM(t.ocena) FROM (SELECT login, SUM(ilosc_godzin) AS ile, SUM(cena) AS suma FROM zadania z LEFT JOIN users u ON (z.idu=u.id) GROUP BY u.login UNION SELECT login, SUM(ilosc_godzin) AS ile, SUM(cena) AS suma FROM zadania z1 LEFT JOIN users u1 ON (z1.idu2=u1.id) GROUP BY u1.login) t GROUP BY t.login;


* przecież kefirek podał Ci już takie rozwiązanie - wystarczyło z niego skorzystać...

Ten post edytował phpion 23.03.2009, 09:41:08
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 - 09:07