如果今天的日期已存在记录,则更新

时间:2011-03-31 18:14:48

标签: php mysql insert-update

是否有一种简单的方法可以更改以下查询,以检查今天日期是否已存在记录,如果它使用最新的计数值更新它。

mysql_query("INSERT INTO daily_record (PageID, count)
             VALUES (".$array['page_id'].",".$array['count'].")");

我要检查的列是CURRENT_TIMESTAMP字段(record_date - daily_record表的一部分),如果pageID存在今天的日期,则需要更新而不是新的插入。

如果有人可以提供帮助那就太棒了!!!

3 个答案:

答案 0 :(得分:1)

好吧,如果你像这样构建daily_record表:

CREATE TABLE daily_record (
    pageID INT,
    record_date DATE,
    count INT,
    PRIMARY KEY (pageID,record_date),
        INDEX idxPageID (pageID)
)

然后您可以使用命令:

INSERT INTO daily_record (
    pageID,record_date,`count`
) VALUES (
    1,'2011-03-31',32
) ON DUPLICATE KEY UPDATE `count`=32;

显然,调用代码将提供pageID / record_date / count。这有效地创建了具有给定计数的pageID / day的记录,或者如果pageID / day的记录已经存在,则它将计数设置为提供的值。

使用DATE列类型可以防止您获得自由时间戳,但这对于此表没有特别用处 - 您描述的方式 - 因为您不关心小时/分钟/秒。

此处的关键是PRIMARY KEY...行创建的唯一索引。如果插入违反了它的唯一性,那么就可以对其进行更新。

答案 1 :(得分:0)

我能想出的最好的方法是使用selectif ... then提前检查存在,或先运行update语句,然后检查@@rowcount (受影响的记录)并且如果它返回0 {/ p>,则执行insert

即。否。

答案 2 :(得分:0)

[编辑 - 由于日期的事情,这比起初看起来要复杂一点。]

要更新记录,您必须获得要更新的计数,因此需要先使用SELECT。但是您需要选择仅适用于当前日期的记录。

我们假设您已完成代码以将当前日期转换为$。

然后正如肯德里克所说,

$result=mysql_query("SELECT * from daily_record where PageID=\'$array['page_id']\' and date_field BETWEEN '$today'.' 00:00:00' AND '$today'.' 23:59:59'");

if (!$result)
   { mysql_query("INSERT into daliy_record (PageID,count} VALUES (\'$array['page_id']\',\'$array['count']\')"); }
else
   {mysql_query("UPDATE daily_record (count) VALUES (\'$array['count']\')  where PageID=\'$array['page_id']\' and date_field=\'$result['date_field']\'");}