仅在每个月的第一天插入数据一次

时间:2013-08-19 09:34:46

标签: php mysql

我想在每个月的第一天将数据插入表格中。它必须只是一次。我的意思是每个月的第一天一行。我在PHP文件中使用mySql完成所有这些。

到目前为止,我得到了这么多 -

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
    }
}

我还没有尝试过这个问题。

5 个答案:

答案 0 :(得分:1)

也许这会解决问题

SELECT * FROM xxx WHERE (DATE_FORMAT(CURDATE() ,'%d')==1)

答案 1 :(得分: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

答案 2 :(得分: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

的更多信息

答案 3 :(得分:0)

你可以使用mysql事件调度程序实现 -

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);

存储过程的OR。

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

答案 4 :(得分:0)

您有两种解决方案,具体取决于您的确切需求。

如果您的数据必须在第一天插入:唯一的方法是使用在正确时间运行的cron作业插入它。如果它只与mysql相关,你可以使用mysql调度程序来完成这项工作。

如果您的数据需要在第一天之后进入表格,但您不关心它是实时添加还是仅在您访问该数据时,那么您不需要cron作业。您可以在访问时检查该数据,然后在读取之前将其插入(如果数据尚未存在)。