Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Odejmowanie(różnica) miedzy dwoma wynikami mysql w pętli WHILE.
Giluś
post 14.10.2011, 11:58:30
Post #1





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Cześć mam taki problem: pobieram całą zawartość jednej bazy danych i wyświetlam ją za pomocą petli while (później tworzę jeszcze obrazek z tych wyników ale to nie aż tak ważne) i chciałbym posortować te wyniki od najlepszego do najgorszego (ORDER BY `czas` ASC) ale chciałbym obliczyć różnice między pierwszym wynikiem (Najlepszym), a każdym z kolejnych np.:
Pierwsza osoba ma taki czas: 1:24,145, a druga osoba ma taki czas: 1:24,170, to wyświetli się + 0:00,025, a trzecia osoba ma czas np.: 1:25,000 to się wyświetli +0:00,885 itd.

Później wszystkie te czasy w mysql mam zapisane w postaci: mm:ss:mss - mm - Minuty, ss - Sekundy, mss - Milisekundy i później chce to wszystko wgrać na obrazek za pomocą imagettftext (gd)

Ma ktoś jakiś pomysł ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Swirek
post 14.10.2011, 12:04:22
Post #2





Grupa: Zarejestrowani
Postów: 221
Pomógł: 20
Dołączył: 4.05.2006
Skąd: Polska

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


select dana1-dana2 as roznica

echo roznica smile.gif

edit.

po dokładnym przeczytaniu zamiast dana1 umieść podzapytanie select która wyciąga najlepszy czas

Ten post edytował Swirek 14.10.2011, 12:05:51


--------------------
Macho odpadacie ;) .
Go to the top of the page
+Quote Post
Giluś
post 14.10.2011, 12:08:12
Post #3





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


No tak, ale takie mam czasy:
1:24,145
1:24,165
1:24,170
1:25,100

Wiec mi to nie zadziała, a do tego dochodzi coś takiego.
1 Osoba - ta najlepsza bedzie miała +0:00,000 to wiadomo, kolejna np bedzie miał 0:00,030 kolejna już 0:00,040 jak to przegrupować do danej osoby


Edit.:
Samo wyciągnięcie najszybszego wyniku jest łatwe: ORDER BY `czas` ASC LIMIT 1 i mam najszybszy czas, teraz jak go zamienić na sekundy czyli z postaci 1:24:145 zrobić 84,145 sekund ?
Taki mi przyszedł pomysł: rozdzielić to na : i , przez explode i później if jeśli (min) = 1 to zamień go na 60 i dodać do tej drugiej cześci i po przecinku ms, dobre by to było rozwiązanie czy jest jakieś optymalniejsze ?



Ten post edytował Giluś 14.10.2011, 12:11:51
Go to the top of the page
+Quote Post
Swirek
post 14.10.2011, 12:14:49
Post #4





Grupa: Zarejestrowani
Postów: 221
Pomógł: 20
Dołączył: 4.05.2006
Skąd: Polska

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


wyciągaj sobie odpowiednie liczby za pomocą np preg_match wyciągnij minuty, sekundy, milisekundy
minuty parametrem razy 60sec itd.
musisz to przerobić na "bardziej przyswajalną formę" ja to tak widzę albo zapisuj czas w unixowym zapisie
pomoże myślę też funkcja microtime()

Ten post edytował Swirek 14.10.2011, 12:16:11


--------------------
Macho odpadacie ;) .
Go to the top of the page
+Quote Post
Giluś
post 14.10.2011, 12:21:37
Post #5





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


Czyli mniej więcej coś takiego:

  1. <?php
  2.  
  3. $czas = "1:10,123"
  4.  
  5. $czas1 = explode(":", $czas);
  6. // Wynik: $czas1[0] - 1
  7. // $czas1[1] - 10,123
  8.  
  9. $czas2 = explode(",", $czas1);
  10. // Wynik: $czas2[0] - 10
  11. // $czas2[1] - 123
  12.  
  13. if($czas1[0] == 1) {$czas1[0] = 60;}
  14. elseif ($czas1[0] == 2) {$czas1[0] = 120;}
  15. elseif ($czas1[0] == 3) {$czas1[0] = 180;}
  16.  
  17. Dodawanie:
  18. $dodaj = $czas1[0] + $czas2[0];
  19.  
  20. $wyswietlanie = "$dodaj,$czas2[1]";
  21. // Wynik: 70,123
  22. // Teraz dodanie do obrazka
  23.  
  24. foreach($czas_najlepszy-$wynik as $roznica)
  25. {
  26. // oczywiscie tutaj wszystkie inne funkcje do gd itp
  27. imagettftext($im, $rozmiar, $kat, $lewy4, $gora, $kolor, "arial.ttf", $roznica);
  28. }
  29.  
  30. ?>



Tak to ma być ?


Po lekkich modyfikacjach zrobiłem Pomógł poleciał smile.gif

Ten post edytował Giluś 14.10.2011, 13:09:20
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:07