Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]/[mysql] sortowanie wg godzin
Forum PHP.pl > Forum > PHP
Lejto
Mam taki skrypt: http://hosting8840938.az.pl/Geckonet_system/
Chcę zrobić aby rekordy pokazywały się od najmniejszej godziny w polu "Do końca".
Do dodanego pola dodaje mktime z ustawioną liczbą dni 'ile godzin'

  1. $eventDate = mktime(date('H'), date('i'), date('s'), date('m'), date('d')+$_POST['czas'], 2012);


potem pobieram dane
funkcja mi liczy godziny i wypisuje w tablece
  1. function CountDown($hour, $minute, $second, $month, $day, $year) {
  2.  
  3. $eventDate = mktime($hour, $minute, $second, $month, $day, $year);
  4.  
  5.  
  6. $today = mktime();
  7.  
  8. $secondsTo = $eventDate - $today;
  9. $minutesTo = round($secondsTo / 60);
  10. $hoursTo = round($minutesTo / 60);
  11. $daysTo = round($hoursTo / 24);
  12. $weeksTo = round($daysTo / 7);
  13. $monthsTo = round($weeksTo / 4);
  14. $yearsTo = round($monthsTo / 12);
  15.  
  16. $values = array(
  17.  
  18. "seconds" => $secondsTo,
  19. "minutes" => $minutesTo,
  20. "hours" => $hoursTo,
  21. "days" => $daysTo,
  22. "weeks" => $weeksTo,
  23. "months" => $monthsTo,
  24. "years" => $yearsTo
  25. );
  26. return $values;
  27.  
  28. }
  29.  
  30. $today = mktime();
  31.  
  32. $sql = $db->query('select * from report where is_active = 1 order by mk_time < "'.$today.'" DESC limit 20 ');
  33.  
  34.  
  35. while($row = $sql->fetch_array())
  36. {
  37. $x = explode('.', $row[date]);
  38.  
  39. $y = explode(" ",$x[2]);
  40.  
  41. $z = explode(":",$y[1]);
  42.  
  43. $rok = $y[0];
  44. $miesiac = $x[1];
  45. $dzien = $x[0];
  46. $godzina =$z[0];
  47.  
  48.  
  49. $xx = CountDown($godzina, 0, 0, $miesiac, $dzien+$row[day], 2012);
  50. if($xx['hours'] < 10)
  51. {
  52. $c = '#F00';
  53. }
  54. else
  55. {
  56. //$c = '#00CC00';
  57. }
  58. ?>
  59. <tr style="color:<?=$c;?>">
  60.  
  61. <td><?=$row[name];?></td>
  62. <td><?=$row[surname];?></td>
  63. <td><?=$row[adress];?></td>
  64. <td><?=$row[phone];?></td>
  65. <td><?=$row[cases];?></td>
  66.  
  67.  
  68. <td><? echo $xx['hours']; ?> h</td>
  69. <td><a href="?action=zamykam&id=<?=$row[id_zgloszenia ];?>" class="myButton">Zamykam</a>
  70. <a href="?action=edit&id=<?=$row[id_zgloszenia ];?>" class="myButton">Edytuj</a></td>
  71.  
  72.  
  73. </tr>
  74. <?
  75. }


Lecz to sortowanie dobrze nie działa, są błędy
Jak to rozwiązać?
Mam jeszcze jeden problem dotyczący CSS, w operze i google chrome tabelka mi wypada z suwaka jest pod nim.


Pozdrawiam
nospor
order by mk_time < "'.$today.'"
Nie za bardzo kumam tego zapisu - co to niby ma robić?
Lejto
pole mk_time w tabeli ma wartość ze zmiennej $eventDate która zawiera informacje o dniu do którego ma być odliczane
nospor
tyle ja się domyślam. Nie rozumiem jednak co o to:
mk_time < "'.$today.'"
robi w ORDER BY.
Lejto
no chce to posortować w zapytaniu, robię źle?
nospor
No ale sortuje się np. po kolumnie, a nie po warunku logicznym - owszem, po warunku też można, ale jak się wie po co sie go robi. Ty wiesz? I właśnie tego nie rozumiem.
Lejto
to jak mam to rozwiązać?
nospor
chyba się nawzajem nie rozumiemy.... no a czemu nie zrobisz tak:
order by pole_z_data_w_tabeli_report
?

edit: chyba już kumam... do_konca smile.gif

1) Czemu robisz rekurencje tutaj? Czemu w funkcji CountDown wywołujesz znowu CountDown?
2) Zeby sortować po "do konca" to trzeba od daty koncowej odjąc date dzisiejszą i po tym sortowac:

order by data_koncowa-now()
i juz.
Lejto
ech
zrobiłem dodatkowe pole i wpisuje w nim date kiedy odliczanie się kończy i na tej podstawie sortuje i jest ok, pozostaje jeszzcze problem z cssem pod operą i chrome

edit:
no racja, też sposób

nie rozumiem jeszcze twojego pytania o rekurencje, jak inaczej to rozwiązać?
nospor
No bo robisz tu rekurencję. Nie wiem po co. Czemu to ma służyć?
Przecież zapytanie z
order by data_koncowa-now()
załatwia wszystko. Po co więc jeszcze w petli wywołujesz sam siebie ponownie tworząc rekurencje?
Lejto
no przecież wywołuje funkcje przy każdym rekordzie żeby obliczyć ilość pozostałych godzin
nospor
Albo ja jestem ślepy i nie widzę gdzieś zakonczenia funkcji albo Ty.

Przecież w funkcji CountDown wywołujesz funkcję CountDown.
Przecież w funkcji CountDown pobierasz już rekordy z bazy i w petli z bazy znowu wywołujesz CountDown i znowu pobierasz z bazy to samo i znbowu wywolujesz CountDown i znowu..... rozumiesz?

edit: dobra, ja jestem slepy. Już znalazłem zakonczenie funkcji smile.gif

Tak bywa, gdy się dostaje kod bez normalnych wcięć.... wink.gif
Lejto
ok smile.gif spoko
masz jakiś pomysł na css?

ok, poradziłem sobie, okazało się że szerokości nie te były smile.gif

pojawiły się problemy z sortowaniem i odliczaniem
sami zobaczcie:
http://hosting8840938.az.pl/Geckonet_system/index.php

tak sortuje:

  1. $sql = $db->query('select * from report where is_active = 1 order by mk_time - NOW()');


problem pojawia się kiedy licznik się przekręca, jak sortować żeby było poprawie od największej do najmniejszej?

mk_time to data do kiedy zlecenie ma być wykonane
nospor
A jakiego typu jest pole mk_time?
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.