是否有一种简单的方法可以更改以下查询,以检查今天日期是否已存在记录,如果它使用最新的计数值更新它。
mysql_query("INSERT INTO daily_record (PageID, count)
VALUES (".$array['page_id'].",".$array['count'].")");
我要检查的列是CURRENT_TIMESTAMP
字段(record_date - daily_record表的一部分),如果pageID存在今天的日期,则需要更新而不是新的插入。
如果有人可以提供帮助那就太棒了!!!
答案 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)
我能想出的最好的方法是使用select
和if ... 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']\'");}