![]() |
![]() ![]() |
![]() |
![]() ![]()
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? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 18 Pomógł: 0 Dołączył: 4.08.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jedyne co przychodzi mi na myśl, jest bardzo nieeleganckim rozwiązaniem, ale chyba inaczej sie nie da. Chodzi o to aby przy wywoływaniu zadań najpierw szukać zadań które są jednorazowe czyli:
$query = mysql_query('select * from zadania where cykliczosc=NULL'); a później wszystkie cykliczne i pobrane przesiewać jakąś funkcją. Nie jest to na pewno dobrym rozwiązaniem, bo baza będzie bardzo obciążona, ale nie mam pojęcia jak to inaczej wykonać. |
|
|
![]()
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
To jest akurat jasne dla mnie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Problem jest jednak w tym, ze nie wiem jak za pomoca SQLa stworzyc zapytanie, ktore umozliwialo by pobranie zadan zaplanowanych w danym dniu. Na podstawie takiego zapytania sam SQL dodawal by/mnozyl/odejmowal (?) aby sprawdzic czy dane pole, jezeli jest "powtarzalne" co jakis czas, bylo brane pod uwage podczas warunky podanej daty. W gre wchodzi takze procedura skladowa (MySQL). Tylko no wlasnie. Jaka? (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
ja wykonywanie zadan cyklicznych zrobilem w prosty sposob
zapisuje date w formacie YYYY-mm-dd jezeli w polu YYYY sa 0000 to oznacza ze to zadanie ma byc wykonywane co roku mm = 00 oznacza zadanie wykonywane co miesiac dd = 00 zadanie wykonywane codziennie codziennie uruchmiam (wlasciwie to cron robi) plik sprawdzajacy czy mm = 00 OR mm = day(now()) itd. bardzo prosty spobo wiec nie wiem czy o to ci chodzilo. ale do zadan cyklicznych ten algorytm sprawdza sie dobrze:) |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
hmm hmm hmm (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
To jest rozwiazanie. Szczerze mowiac nie pomyslalem o tym. Jednak mam do tego zalozenia jeszcze jedno "ale" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Problem jest taki, ze zadanie moze sie powtarzac np co tydzien, co 2 miesiace etc. I tutaj juz wymiekam :/ Bo Twoje rozwiazanie sprawdzi sie napewno jezeli bym potrzebowal planowac co dany dzien, miesiac czy rok. Ale musze miec mozliwosc planowania np co tydzien od danego dnia :/ A nie moge niestety wpisywac kazdego zadania w cronie bo urosl by on do bardzo duzych rozmiarow. Swoja droga moze wlasnie to jest rozwaizaniem... zrobienie wlasnego crona na bazie danych? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) ![]() ![]() |
w sumie racja, nie pomyslalem o tym:)
Cron w bazie to zly pomysl, zalozmy ze masz co 2 miesiace wysylac maila do userow. zaczynasz wypelniac tabele 'cron' wpisami co 2 miesiace, i co? do kiedy to wypelniasz? powiedzmy 10 lat? a pozniej co. slabe rozwiazanie, wogole nie elastyczne. moze dodaj kolumne interval, tam wpisuje np ilosc dni - co ile dni ma byc wykonywane zapytanie. albo wpisuj tam gotowe czesci zapytania SQL a pozniej to tylko wklejaj w sprawdzaniu czy to ma sie wykonac dzisiaj. np dla tygodni DATE_ADD(NOW(), INTERVAL '2' WEEKS); dla dni DATE_ADD(NOW(), INTERVAL '2' DAYS); i ta dwojke zapisuj w jednej kolumnie, a w drugiej zapisuj DAY, MONTH, WEEKS, YEAR mysle ze daloby sie cos takiego wykombinowac - doprowadzic do stanu uzywalnosci:) |
|
|
![]()
Post
#7
|
|
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:
Natomiast najwazniejsza rzecz jest skrypt ktory odpala nastepujacego SQLa:
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) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 13:04 |