Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dwie sumy, dwóch tabel w jednym zapytaniu, Co robię źle?
dawnthief
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.10.2014

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


Witajcie, jestem tu nowy i mam pewien problem.
Dane są dwie tabele o tej samej strukturze:

fm_expenses i fm_income
w expenses przechowywane są dane o wydatkach a w income o dochodach

ID int(11)
SUMA float(10,2)
DATA timestamp
CATEGORY int(3)
USERID int(11)


Chcę zliczyć sumę fm_income jako dochody a fm_expenses jako wydatki
robię to tak:
  1. SELECT SUM(fm_expenses.SUMA) AS wydatki, SUM(fm_income.SUMA) AS dochody FROM fm_expenses LEFT JOIN fm_income ON fm_expenses.USERID = fm_income.USERID WHERE fm_expenses.USERID=1 AND fm_income.USERID=1

i wychodzą bzdury. Kosmiczne cyfry, zdaję sobie sprawę że skaszaniona relacja tu jest, ale za to zwraca to wszystko w ładnym formacie (dwa pola, wydatki i dochody).
Wykombinowałem jescze jeden sposób:
  1. SELECT SUM(SUMA) AS dochody FROM fm_income WHERE USERID=1 UNION SELECT SUM(SUMA) AS wydatki FROM fm_expenses WHERE USERID=1

Zwraca prawidłowe liczby ale wszystko w polu dochody i jako dwa rekordy.

Jak to ugryźć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
dawnthief
post
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 6.10.2014

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


Teraz już kompletnie odwaliło
  1. SELECT userid,SUM(suma*(1-ABS(SIGN(typ-1)))) AS wydatek,SUM(suma*(1-ABS(SIGN(typ-2)))) AS dochod FROM
  2. (SELECT w.USERID, w.SUMA, 1 AS typ FROM fm_expenses AS w LEFT JOIN fm_income ON fm_income.USERID=w.USERID WHERE w.userid=2
  3. UNION ALL
  4. SELECT d.USERID,d.SUMA,2 AS typ FROM fm_income AS d LEFT JOIN fm_expenses ON fm_expenses.USERID=d.USERID WHERE d.userid=2
  5. ) AS tmp GROUP BY USERID


Wrzucam takie zapytanie (zmieniłem userid z 1 na 2 , bo chciałem sprawdzić na małej ilości danych)
mam w dochodach dwa rekordy SUMA=3.00 co powinno dawać 6
a w wydatkach jeden rekord SUMA=2.00 a drugi SUMA=2.50 co powinno dawać 4.50

Otrzymuję taki wynik:
wydatek: 9
dochod: 12
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: 13.10.2025 - 19:31