![]() |
![]() ![]() |
![]() |
![]()
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: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
w tym celu zakładasz tablice tymczasowe...
-------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
Post
#3
|
|
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. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 595 Pomógł: 282 Dołączył: 24.09.2007 Skąd: Reda, Pomorskie. Ostrzeżenie: (0%) ![]() ![]() |
szczerze mówiąc to powinno działać... chyba że comm też jest NULL (jeśli nie ma jeszcze żadnych komentarzy...) hm... ale możesz spróbować tak:
powodzenia. -------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 8.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki, już sobie poradziłem. Szkoda, że jak nie ma wartości to sum zwraca NULL, a nie 0. Nie można teraz dodać NULLA do żadnej wartości, wychodzi NULL.
Jeśli obie są NULL, to i tak dla mnie nie ma znaczenia, wtedy wynikiem jest NULL, interpretowany przez PHP jako 0. Jeśli natomiast jedna z wartości była NULL, a druga liczbą, otrzymywałem NULL, choć powinno być coś innego. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 16.07.2025 - 15:41 |