Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wykonanie zapytanie w pętli
115750
post
Post #1





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

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


Mam dość skomplikowane zapytanie, które dla danego pracownika sumuje otrzymane w ciągu roku wypłaty (pensje, premie, dodatki itp).
Każdy taki składnik jest w osobnej tabeli i dlatego to zapytanie trochę się skomplikowało.
Jednak działa to bardzo dobrze dla jednego pracownika.

Potrzebowałbym teraz wykonać takie podsumowanie roczne dla wszystkich pracowników.
Czy mogę zatem użyć jakiejś pętli indeksowanej numerami id pracowników, żeby wygenerować taką listę?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
115750
post
Post #2





Grupa: Zarejestrowani
Postów: 117
Pomógł: 0
Dołączył: 7.06.2004
Skąd: Poznań

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


Dziękuję za Wasze odpowiedzi.
Poradziłem już sobie modyfikując nieco moje zapytanie i stosując grupowanie z sumą według numeru pracownika.

  1. WHERE id_pacownika IN(1,2,3,4) albo WHERE id_pacownika IN(SELECT id ....)

To by chyba nie zdało egzaminu, bo klauzulę WHERE id_pacownika miałem aż 3 razy - z powodu unii.

Żeby nie być gołosłownym pokażę Wam tego potwora - zapytanie:

  1. SELECT T1.id_person, T1.podstawa*T3.podstawa_kwota + T1.dzieci*T3.dzieci_kwota - (T1.podstawa*T3.podstawa_kwota * T3.podstawa_stopa / 100) -
  2. (T1.dzieci*T3.dzieci_kwota*T3.dzieci_stopa / 100) AS kwota
  3. FROM lists_persons T1, persons T2 LEFT JOIN cities AS T4 ON T2.miasto = T4.id, lists T3 WHERE
  4. T3.zamknieta = 0 AND T2.id = T1.id_person AND T3.id = T1.id_list AND T1.id_person = 1885
  5. UNION ALL
  6. SELECT T1.id_person, T1.suma AS kwota FROM lists_persons T1, lists T2 WHERE T1.id_list = T2.id AND T2.zamknieta = 1 AND T1.id_person = 1885 AND T2.rok = 13
  7. UNION ALL
  8. SELECT p_id, kwota FROM other_benefits WHERE p_id = 1885 AND DATA LIKE "%2013-%"


Przerobiłem to do postaci:
  1. SELECT osoba, sum(kwota) AS suma FROM
  2. (
  3. SELECT T1.id_person AS osoba, T1.podstawa*T3.podstawa_kwota + T1.dzieci*T3.dzieci_kwota - (T1.podstawa*T3.podstawa_kwota * T3.podstawa_stopa / 100) - (T1.dzieci*T3.dzieci_kwota*T3.dzieci_stopa / 100) AS kwota
  4. FROM lists_persons T1, persons T2 LEFT JOIN cities AS T4 ON T2.miasto = T4.id, lists T3 WHERE T3.zamknieta = 0 AND T2.id = T1.id_person AND T3.id = T1.id_list
  5. UNION ALL
  6. SELECT T1.id_person AS osoba, T1.suma AS kwota FROM lists_persons T1, lists T2 WHERE T1.id_list = T2.id AND T2.zamknieta = 1 AND T2.rok = 13
  7. UNION ALL
  8. SELECT p_id AS osoba, kwota FROM other_benefits WHERE DATA LIKE "%2013-%"
  9. ) TX
  10. GROUP BY osoba
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 12:40