2012-03-08 29 views
15

Ben MySQL belirli aralıklarla çalıştırmak için bir görev zamanlama miyim?MySQL sorgusu nasıl zamanlanır?

Ben bir envanter MySQL veritabanı var. Ben geçmiş tarih için stok değerleme ayrıntıları madde bilge istediğinizde

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

raporun dayanak aldığı şu şekildedir: yapıdır. Yeni bir satın alma sistemine gönderilen zaman

avgcost ve quantity alanlar

değiştirilir. Mevcut stok değerlemesini görmek için bir sorgu çalıştırabilirim, ancak hisse senedi değerlemesini önceki bir tarihte de görebilmek istiyorum. Bunu nasıl yaparım? miktar için, ben satışları ekleyebilir ve rapor gerektiren her türlü tarih kadar geçerli tarihten itibaren geriye doğru alımlarını düşeriz, ama bu bir satın alma yayınlandığı her zaman güncellenir beri avgcost akımdır. Otomatik günlük dökümü infaz edilip edilemeyeceğini

Buna benzer, merak ediyorum:

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

mümkün bu görev MySQL doğrudan planlamak mı veya başka bir çözüm yoktur?

cevap

32

size 2 temel seçenek (en azından) var: , Birinci tablo örneğin oluşturmak Event Scheduler

bir göz atın.

ItemCode, miktar, 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 

nasıl yukarıda yayınlanan linke zamanlayıcı etkinleştirmek için talimatları takip ediniz alanları ile stock_dumps. Not:

sql dosyası oluşturmak: mysql eski sürümleri cron işi oluşturma olay zamanlayıcı

2/windows planlanan işim yok

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; 

zamanlama bu komut:

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

olay zamanlayıcı desteklemek için MySQL minimum versiyonu nedir? – Lucky

+3

http://dev.mysql.com/doc/refman/5.1/en/events.html: "Olay destek MySQL 5.1.6 eklendi" – rkosegi

1

Bunu yapmak için EyeShare veya AutoSQL.net. EyeShare, daha genel bir BT işlem otomasyon aracıdır ve AutoSQL, özellikle sorguları programlamak ve çıktı almak için (Excel veya CSV) tek bir amaçtır.