如果是新的一天创建新记录,否则UPDATE ON DUPLICATE KEY

时间:2016-08-07 08:24:19

标签: php mysql sql

在我的应用程序中,我有35个不同的网站,每个网站都有一个网站ID。在所有这些网站上,每个网站上都有不同的广告系列(Campaign_id)

我的目标是记录广告系列每天在网站上的点击次数。如果site_id / campaign_id / todays日期不存在,我需要它来自动创建记录。如果它确实存在,它应该只更新命中。在这个例子中,我只是随机生成网站ID和广告系列ID,例如清酒

$site_id = rand(1,99);
$campaign_id = rand(1,99);
mysql_query("INSERT INTO `out` (site_id,campaign_id,hits) VALUES(".$site_id.",".$campaign_id.",1)
          WHERE date = '".date('Y-m-d')."'
          ON DUPLICATE KEY UPDATE hits=hits+1, 
          date = '".date('Y-m-d')."'
          ");

以上内容将完全符合我的要求,但日期字段始终如此 0000-00-00。我需要它是今天的日期,之后每次交易都需要+1。你们中任何一个有能力的人都知道如何改变它以使其发挥作用?

2 个答案:

答案 0 :(得分:0)

答案很简单。只需插入日期,即可有效地使每个网站,广告系列和日期独一无二。插入后,下一个事务将只更新命中。第二天,将创建一条新记录,因为日期已更改,第二天的点击将在下一天的记录中更新。

@mysql_query("INSERT INTO `out` (site_id,campaign_id,hits,date) VALUES(".$site_id.",".$campaign_id.",1,'".date('Y-m-d')."')
          ON DUPLICATE KEY UPDATE hits=hits+1
          ");

答案 1 :(得分:0)

首先,您需要(site_id, campaign_id, date)上的唯一索引/约束:

create index unq_out_site_campaign_date on `out`(site_id, campaign_id, date)

(请注意,列可以按任何顺序排列。)

然后您可以使用以下代码插入表中:

INSERT INTO `out` (site_id, campaign_id, date, hits) 
    VALUES(".$site_id.", ".$campaign_id.", CURDATE(), 1)
    ON DUPLICATE KEY UPDATE hits = hits+1;

据推测,你的目标是增加今天的点击量。如果没有,请传入当前日期的值并遵循相同的逻辑。