Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kaskadowe sumowanie
DeyV
post
Post #1





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Mam zapytanie które zwraca mi mniej więcej taki wynik
Kod
id | nazwa           | ile

---+-----------------+----

1  | poniedziałek    | 1

2  | wtorek          | 3

3  | środa           | 5

A teraz chciałbym przy pomocy jednego zapytania w każdym z rekrodów otrzymać wartość sumującą wszystkie poprzednie pola ile (wraz z aktualnym)
np.
Kod
id | nazwa           | ile  | wynik

---+-----------------+------+----

1  | poniedziałek    | 1    | 1

2  | wtorek          | 3    | 4

3  | środa           | 5    | 9

Maiłem nadzieję, że wystrczy zapytanie typu:
[sql:1:eb3e8c2ddf]
SELECT id, nazwa, ile
@wynik := ile +
if( @wynik , @wynik , 0 ) FROM `tabela`[/sql:1:eb3e8c2ddf]
jednak to nie to.
Can You help me?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
adwol
post
Post #2





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

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


Cytat
Bo ja sprawdzalem propozycje adwola, spenalzo i one nie dzialaly (tzn. suma sie nie kumulowala), a "moim" sposobem poszlo i zliczylo tak jak chciales.

No właśnie jest to ciekawe, bo tak nie działa:
Kod
mysql> select @a;

+------+

| @a   |

+------+

| NULL |

+------+

1 row in set (0.00 sec)



mysql> SELECT id, nazwa, ile, if(@a IS NOT null,@a:=@a+ile,@a:=ile) AS wynik from deyv;

+------+--------------+------+-------+

| id   | nazwa        | ile  | wynik |

+------+--------------+------+-------+

|    1 | poniedzialek |    1 |     1 |

|    2 | wtorek       |    3 |     3 |

|    3 | sroda        |    5 |     5 |

+------+--------------+------+-------+

3 rows in set (0.00 sec)

ale tak to już pójdzie:
Kod
mysql> select @a:=null;

+----------+

| @a:=null |

+----------+

| NULL     |

+----------+

1 row in set (0.00 sec)



mysql> SELECT id, nazwa, ile, if(@a IS NOT null,@a:=@a+ile,@a:=ile) AS wynik from deyv;

+------+--------------+------+-------+

| id   | nazwa        | ile  | wynik |

+------+--------------+------+-------+

|    1 | poniedzialek |    1 |     1 |

|    2 | wtorek       |    3 |     4 |

|    3 | sroda        |    5 |     9 |

+------+--------------+------+-------+

3 rows in set (0.00 sec)

Oba przykłady były robione niezależnie w osobnych sesjach.
Nie rozumiem, dlaczego jawne zainicjowanie zmiennej na NULL daje dobry wynik, skoro w/g manuala:
Cytat
Variables don't have to be initialised. They contain NULL by default and can store an integer, real, or string value.
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: 5.10.2025 - 22:43