Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Odejmowanie(różnica) miedzy dwoma wynikami mysql w pętli WHILE.
Forum PHP.pl > Forum > Przedszkole
Giluś
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ł ?
Swirek
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
Giluś
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 ?

Swirek
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()
Giluś
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.