![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 8.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam taki problem.
Utworzyłem sobie procedurę, zwracającą 2 zmienne, zawierające sumę pewnych danych z określonych kolumn. Jednak działa mi to dla jednego zapytania select. Czy da się zrobić coś takiego, żebym: - w procedurze, przy pomocy petli while leciał przez np 30 rekordów osobno - sume poszczególnych kolumn z każdej iteracji zapisać do zmiennej tablicowej, którą procedura zwraca Czy jest to możliwe w MySQL i w ogóle w jakimkolwiek silniku bazy danych? Jeśli nie, czy można jakoś zrobić, żeby procedura po prostu zwróciła tablicę asocjacyjną, żebym mógł zczytać te same dane dla różnych rekordów? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 8.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie. W takim razie kolejne pytanie:
Cytat CREATE PROCEDURE get_rank(IN program_number INT) Co tu jest nie tak? Błąd jest w wartości trans. Jeśli jest ona null (brak wpisów w tabeli comments), rank_sum też jest wtedy null, a nie może być. Dałem więc: set rank_sum = IF(trans,trans + comm,comm);BEGIN DECLARE i INT; DECLARE comm INT; DECLARE trans INT; DECLARE rank_sum INT; SET i=0; CREATE TEMPORARY TABLE IF NOT EXISTS program_rank (program_id int unsigned not null primary key, rank int unsigned not null); WHILE i<program_number DO SET i = i + 1; SELECT SUM(type) INTO comm FROM comments WHERE program_id = i AND confirm_code = '0'; SELECT SUM(amount) INTO trans FROM transactions WHERE program_id = i and type = 1; set rank_sum = IF(trans,trans + comm,comm); INSERT INTO program_rank VALUES (i, rank_sum); END WHILE; END; // Powinno to w przypadku gdy trans jest NULL, zwracać tylko wartość comm. Jeśli nie, zwracać sumę trans+comm. Jednak jeśli trans jest NULL, rank_sum też jest null. Jeśli jest różne od NULL, wszystko działa jak powinno. Pomóżcie prosze, już modyfikowałem to na różne sposoby ale nic nie pomogło, ciągle mam ten sam błąd. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 00:21 |