[ bobiris @ 22.07.2003. 13:53 ] @
Imam rezultate tipa "time", i problem pri sabiranju.

Konkretno:

12:45
09:25
05:00

=3,10

To jest 24 sata koja se ne vide, i 3:10 koji se vide.

Meni treba da se u poslednjem polju, koje predstavlja zbir, kao rezultat vidi 27:16 ili 27,16 ili tako nesto, ali Acces vreme broji samo do 24 casa, pa ide ispocetka.

Ako saberem sve kao brojeve, dobijem rezultat 26,7 bodova, sto je netacno, jer:
svaki sat nosi jedan bod, a jedan bod ima 60 poena, tj svaki minut je jedan poen. Znaci: 12+9+5 = 26 i 45+25 = 70/60 = 1,16 (+26 = 27,16), Prakticno, sabiraju se cifre levo od ":" sa ciframa desno od ":" /60, da bi se dobio ispravan rezultat. Treba valjda neka konverzija iz vremena u broj ili tako nesto.

Kako?
[ bluesman @ 22.07.2003. 14:07 ] @
Konvertuj sve u minute pa saberi i takav broj podeli sa 60.
[ bobiris @ 22.07.2003. 14:22 ] @

"Konvertuj sve u minute pa saberi i takav broj podeli sa 60."

Pocetnik sam, kako?

Tabela se zove "rezultati", polje za vreme se zove "vreme", a polje za zbir, "svega"
[ byTer @ 22.07.2003. 15:40 ] @
Ali to ne mozes da uradis u samom SQLu vec koji skript jezik koristis pa sa njime u promenljive. Ali razmotri sve mogucnosti jer se nekad menja dan, pa negde , ako imas moras da povecas i dan, itd...
[ bluesman @ 22.07.2003. 16:18 ] @
Evo iz glave... probaj ovako, trebalo bi da radi:

Code:
MySQL query (treba da radi i sa Accessom):
select sum (hour(vreme)) as SvegaSati, sum(minute(vreme)) as SvegaMinuta from rezultati


onda dobijes 2 vrednosti, ukupan broj sati (na primer 134) i ukupan broj minuta (na primer 67). Da bi prebacio minute u sate moraces da podelis sa 60 (1 sat ima 60 minuta). Recimo ako imas SvegaMinuta = 67...

znaci
Code:
DodatnihSati = intval (SvegaMinuta / 60)


sto bi u primeru bilo: 67/60 = 1,116777, ali posto trazis samo integer vrednost [u php to je funkcija intval()], dobices: DodatnihSati = 1

onda, da nebi dobijao decimalne vrednosti...

Code:
DodatnihMinuta = SvegaMinuta - (DodatnihSati * 60);

(u nasem slucaju: DodatnihMinuta = 67 - (1 * 60) = 7

Znaci ukupno si dobio:
Code:
TotalSati = SvegaSati + DodatnihSati (u primeru: 134 + 1 = 135)

TotalMinuta = DodatnihMinuta (u primeru 7)

Znaci totalno vreme je 135:07 ili (136h 7')

Onda radi sa tim sta hoces.
Namomena: ovo sam ti pisao iz glave i da bi ti bilo sto jasnije, moze ovo malo i da se optimizuje, ali ne brini o tome sada.
[ bobiris @ 23.07.2003. 13:23 ] @
Ok, uradio sam ovako:

Sum(Hour(rezultati.vreme))+Sum(Minute(rezultati.vreme)/60) As Svega

i to je ono sto mi treba.

Hvala Bluesman!
[ bluesman @ 23.07.2003. 18:08 ] @
Nema na cemu, samo ne znam zasto delis minute sa 60 (dobijas tako sekunde)... verovatno odmah racunas neku zaradu, zar ne?

Po meni je generalno bolja ideja da iz baze dobijes rezultate a sve kalkulacije uradis u script jeziku (PHP, ASP... ). Mislim da je brze tako (i sigurnije).
[ bobiris @ 24.07.2003. 15:52 ] @
Zato jer mi trebaju POENI, koje dodajem na sate. 60 sekundi = 1 poen. Ustvari sam kod napisao drugacije, malo prosireno:

Sum(Hour(rezultati.vreme))+Sum(Minute(rezultati.vreme)/60)+(rezultati.bodovi) As Svega

Tako dobijam odmah broj bodova koji mi treba za rang listu.

Jos jednom hvala.