Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Grupowanie po 2 polach.
Forum PHP.pl > Forum > Bazy danych > MySQL
metalog
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...)
kefirek
  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
metalog
  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
phpion
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ć...
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-2025 Invision Power Services, Inc.