2013-08-19 140 views
1

我想在每個月的第一天將數據插入表中。它必須只是一次。我的意思是每個月的第一天有一行。我正在做一個PHP文件,並使用mySql每個月的第1天只插入一次數據

到目前爲止,我得到這個much-

if(Date('j')==1) 
{ 
    $query = select 1 from table where extract (year from t1) = extract(year from now()) and extract(month from t1) = extract(month from now()) LIMIT 1 
    if (@mysql_num_rows(mysql_query($query)) == 0) 
    { 
     //perform insert operation 
    } 
} 

我還沒試過此查詢,直到呢。

+1

聽起來像是你將需要建立一個cron作業爲。 – Terry

+0

在Mysql中使用cronjob或scheduler。 –

+0

好的,這是什麼問題? ;-) – michi

回答

0
SELECT DATEADD(mm, DATEDIFF(mm,0,GETDATE())-1,0) as StartOfLastMonth 
SELECT DATEADD(mm, DATEDIFF(mm,0,GETDATE()),0) as StartOfThisMonth 
SELECT DATEADD(mm, DATEDIFF(mm,0,GETDATE()),0) as StartOfNextMonth 
0

試用事件調度

CREATE EVENT myevent 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MONTH 
    DO 
     "YOUR QUERY" 

下面您必須對您想要在1個月的間隔運行日期運行此。

你上http://dev.mysql.com/doc/refman/5.1/ja/create-event.html

+0

這將避免在當天多次插入?我的意思是這個事件只會發生一次? – yudi2312

+0

是的,它會在一個月內發生一次。 –

0

的更多信息,你可以使用MySQL事件scheduler--

http://dev.mysql.com/doc/refman/5.1/en/events.html

CREATE EVENT IF NOT EXISTS `my_old_data_cleaner_event` 
ON SCHEDULE EVERY 23 DAY_HOUR 
COMMENT 'Clean up Service Start at 11:00PM daily!' 
DO DELETE FROM my_table WHERE created_date < (NOW() - INTERVAL 1 MONTH); 

或存儲過程實現的。

CREATE EVENT IF NOT EXISTS `my_old_data_cleaner_event` 
ON SCHEDULE EVERY 23 DAY_HOUR 
DO CALL my_sp_cleanup_old_data(); 
+0

這將避免在當天多次插入?我的意思是這個事件只會發生一次? – yudi2312

0

根據您的確切需求,您有兩種解決方案。

如果您的數據必須在第一天插入:唯一的方法是使用在正確時間運行的cron作業插入它。如果只有mysql相關,你可以使用mysql調度程序來完成這項工作。

如果您的數據需要在第一天之後在表格中,但是您不在意它是實時添加還是隻在您訪問數據時添加,那麼您不需要cron作業。您可以在訪問數據時檢查數據,如果數據尚未存在,請在閱讀前插入。

1

也許這將這樣的伎倆

SELECT * FROM xxx WHERE (DATE_FORMAT(CURDATE() ,'%d')==1) 
相關問題