3

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

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

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

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

4

3 回答 3

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...行创建的唯一索引。如果插入违反了它的唯一性,则可以对其进行更新。

于 2011-03-31T18:50:59.370 回答
0

我能想到的最好的方法是使用selectwithif ... then提前检查是否存在,或者update先运行语句,检查@@rowcount(受影响的记录)并执行insert是否返回 0)

即没有。

于 2011-03-31T18:18:09.477 回答
0

[编辑 - 由于 DATE 的原因,这比起初看起来要复杂一些。]

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

假设您已经完成了将当前日期放入 $today 的代码。

然后正如肯德里克所说,

$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'");

如果(!$结果)
   { mysql_query("INSERT into daliy_record (PageID,count} VALUES (\'$array['page_id']\',\'$array['count']\')"); }
别的
   {mysql_query("UPDATE daily_record (count) VALUES (\'$array['count']\') where PageID=\'$array['page_id']\' and date_field=\'$result['date_field']\ '");}
于 2011-03-31T18:42:52.327 回答