Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Planowanie zadan - struktura bazy
Seth
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Pisze system do planowania zadan.
Ma on miec mozliwosc planowania zadan na dany okres ale takze takich, ktore beda sie pojawiac cyklicznie.
Chodzi tez o to aby nie wypelniac bazy takimi zadaniami np do 10 lat w przod.

Czyli potrzebuje ogolnie sposobu zapisu zadania w takiej formie aby moc okreslic kiedy ma sie pojawic dane zadanie, wtedy takze kiedy wystepuje np. co miesiac.

Przyklad:
Planujemy wizyte u lekarza. Ma ona byc powiecmy co 3 miesiace.
W bazie wstawiam znacznik daty pierwszego spotkania i "jakos" podaje ze to zadanie bedzie wykonywane cyklicznie co 3 miesiace.
I teraz wchodzac w dany dzien (pytajac bazy danych przez SQLa) mam miec mozliwosc pobrania tego zadania bo np. jest to dzien w ktorym to zadanie ma sie pojawic bo minely 3 miesiace od ostatniej wizyty.


Ma ktos jakies pomysly jak to rozwiazac w bazie danych?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Seth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Przetestowalem kilka mozliwosci i udalo mi sie znalezc taka, ktora dziala bez problemu (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Mamy w bazie tabele T_DispatchSchedule, ktora ma min. pole:
- DispatchDate - ktore jest typu DATE (sama data bez czasu)
- Perpetula - true/false okreslajace czy dana data jest powtarzalna o zdany okres czasu
- DispatchInterval - unix timestamp okreslajacy interval czasowy. Dopuszaclny to X dni, X miesiecy, X lat (oraz laczone).

Do wyznaczania intervalu mam prosta metode:
  1. <?php
  2. public function getInterval($day, $month = 0, $year = 0) {
  3. $interval = $day * 24 * 60 * 60;
  4.  
  5. if ($month > 0) {
  6. $interval *= $month;
  7.  
  8. if ($year > 0) {
  9. $interval *= $year;
  10. }
  11. }
  12.  
  13. return $interval;
  14. }
  15. ?>



Natomiast najwazniejsza rzecz jest skrypt ktory odpala nastepujacego SQLa:

  1. SELECT *
  2. WHERE UNIX_TIMESTAMP(DispatchDate) = UNIX_TIMESTAMP(DATE(NOW())) OR (
  3. Perpetual = 1 AND (UNIX_TIMESTAMP(DATE(NOW())) - UNIX_TIMESTAMP(DispatchDate)) > 0 AND (UNIX_TIMESTAMP(DATE(NOW())) - UNIX_TIMESTAMP(DispatchDate)) MOD DispatchInterval = 0
  4. )


Pobiera on wszystkie zaplanowane czynnosci na dzisiejszy dzien i na dzien kory powtarza sie.

Have fun (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 17.10.2025 - 21:44