rebuk
14.09.2014, 19:01:24
Witajcie,
zastanawiam się jak można zrobić automatyczną zmianę rekordu w bazie po przekroczeniu zadanej daty. Czyli chodzi mi o coś co można spotkać np. na stronach z ogłoszeniami - mam w tabeli m.in. kolumny status i data_zakonczenia i chciałbym żeby po 'przeterminowaniu' danego ogłoszenia zmienił się jego status (np. z aktywne na zakończone).
Myślałem o Cronie lub Event Scheduler, ale nie wiem czy częste uruchamianie (może nawet co sekundę) to dobre rozwiązanie gdy np. najbliższe ogłoszenie kończy się za tydzień...
Czy są jakieś lepsze sposoby?
kartin
14.09.2014, 19:12:19
Zasadniczo możesz się pozbyć się pola status. Do listingu możesz pobierać np. tylko te ogłoszenia w których data zakończenia jeszcze nie nastąpiła, a przy wyświetlaniu szczegółów ogłoszenia status wyświetlasz też stosownie do daty zakończenia.
Damonsson
14.09.2014, 19:36:27
Możesz sobie wykorzystać CRONa, ale na jednym serwerze to się zrobi lipa z wydajnością.
Status userowi zmieniasz za pomocą JS, pobierając czas do zakończenia i odliczając to po jego stronie, plus przy każdym odświeżeniu strony pobierasz realny czas do zakończenia ogłoszeń widocznych na stronie, bo jakieś obsunięcia mogą się zawsze pojawić.
rebuk
16.09.2014, 19:39:58
Do samego wyświetlania rekordów faktycznie to starczy, problem pojawia się gdy chcemy aby w chwili zakończenia pojawiała się jakaś akcja (np. wysłanie maila do usera).
A może coś takiego:
cron np. co godzinę uruchamia skrypt sprawdzający czy w przeciągu tej godziny kończy się któreś ogłoszenie -> jeżeli tak, to odlicza pozostały czas i po jego upływie wykonuje akcje.
A jak takie zadania są realizowane w praktyce, np. na allegro?
kartin
16.09.2014, 22:04:13
Załóż indeks na kolumnę data_zakonczenia. Do tego cron z wysyłaniem maila np. co 2-10 min. Zresztą jak nie masz dużego ruchu lub milionów rekordów to tragedii z wydajnością pewnie nie będzie nawet jak puścisz co minutę.
Nie wydaje mi się aby Allegro wysyłało maile natychmiast po zakończeniu aukcji, zwykle czeka się kilka minut, tak samo trzeba czekać zanim w panelu administracyjnym zmieni się status aukcji np. z wystawione na zakończone.
rebuk
18.09.2014, 09:11:53
Dzięki za pomoc, będę kierował się tą droga
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.