2012-03-08 4 views
15

Czy mogę zaplanować uruchamianie zadania w określonym przedziale czasu w MySQL?Jak zaplanować zapytanie MySQL?

Posiadam bazę danych MySQL. Struktura jest następująca:

table_1   fields: itmcode, avgcost 
table_2   fields: itmcode(FK to table_1(itmcode)), quantity 

Podstawą raportu jest moment, w którym chcę, aby szczegóły wyceny zapasów były mądre w przeszłości.

Pola avgcost i quantity zostają zmienione po zaksięgowaniu nowego zakupu w systemie. Mogę uruchomić zapytanie, aby zobaczyć aktualną wycenę akcji, ale chcę również móc zobaczyć wycenę akcji w poprzednim terminie. Jak mogę to zrobić? W przypadku ilości mogę dodać sprzedaż i odjąć zakupy wstecz od bieżącej daty do daty wymaganej przez raport, ale avgcost jest aktualny, ponieważ jest aktualizowany przy każdym zaksięgowaniu zakupu.

Zastanawiałem się, czy automatyczne codzienne zrzutu może być wykonana, podobnie do tego:

SELECT itmcode, quantity, avgcost, (avgcost * quantity) as ttlval 
FROM table_1 
JOIN table_2 ON table_1.itmcode = table_2.itmcode 

Czy to możliwe, aby zaplanować zadanie bezpośrednio w MySQL czy istnieje jakieś inne rozwiązanie?

Odpowiedz

32

masz 2 opcje podstawowe (co najmniej):

1, przyjrzeć Event Scheduler

najpierw utworzyć tabeli np. stock_dumps z polami

itemcode, ilość, avgcost, ttlval, dump_date (DATETIME)

CREATE EVENT `Dumping_event` ON SCHEDULE 
     EVERY 1 DAY 
    ON COMPLETION NOT PRESERVE 
    ENABLE 
    COMMENT '' 
    DO BEGIN 
INSERT INTO stock_dumps(itemcode, quantity, avgcost, ttlval,dump_date) 
SELECT itmcode, quantity, avgcost, (avgcost * quantity)as ttlval, NOW() 
    FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode; 
END 

proszę postępować zgodnie z instrukcjami, jak włączyć planującego na linku zamieszczonych powyżej. Uwaga: Starsze wersje MySQL nie masz wydarzenie scheduler

2, Utwórz zadanie cron/Windows zaplanowanego zadania:

utworzyć plik sql: harmonogram

INSERT INTO stock_dumps(itemcode, quantity, avgcost, ttlval,dump_date) 
SELECT itmcode, quantity, avgcost, (avgcost * quantity)as ttlval, NOW() 
FROM table_1 JOIN table_2 ON table_1.itmcode = table_2.itmcode; 

to polecenie:

mysql -uusername -ppassword < /path/to/sql_file.sql 
+1

jaka jest minimalna wersja MySQL do obsługi programu do planowania zdarzeń? – Lucky

+3

http://dev.mysql.com/doc/refman/5.1/en/events.html: "Obsługa zdarzeń została dodana w MySQL 5.1.6" – rkosegi

1

Dostępne są podstawowe narzędzia, takie jak EyeShare lub AutoSQL.net, aby to zrobić. EyeShare jest bardziej ogólnym narzędziem do automatyzacji procesów IT, a AutoSQL jest narzędziem jednorazowym przeznaczonym specjalnie do planowania zapytań i generowania ich (do Excela lub CSV).