如果CURDATE()匹配,则在重复键更新时插入PHP / MYSQL,否则创建新条目

时间:2013-04-26 16:39:20

标签: php mysql

我在使用mysql和php编写程序时遇到问题... 看我想将搜索查询保存到数据库中, 见这个例子

Stackoverflow searching =>日期20次=> 2013年4月26日

Stackoverflow searching =>日期10次=> 2013年4月27日

Stackoverflow searching =>日期50次=> 2013年4月28日

格式无关紧要。实际上,如果日期发生变化,我想保存搜索查询。 如果日期匹配,那么应该更新时间+ 1

请参阅此代码,

<?php

$keyword = null;
$date = null;

if (!empty($_GET['s'])) {


$keyword = stripslashes($_GET['s']);

$date = date("Y-m-d");

try {

    $objDb = new PDO('mysql:dbname=search;charset=UTF-8', 'root', '');

            $check = "SELECT *
            FROM `search1`
            WHERE `keyword` = '$keyword%'
            AND `date` = CURDATE() ";

            if (!empty($check))
            {
            $sql ="UPDATE `search1`
            SET `times` = `times` + 1
            WHERE `keyword` = '$keyword%'
            AND `date` = CURDATE()";
            }
            else 
            {
            $sql = "INSERT INTO `search1` (`keyword`, `date`) VALUES (:keyword, :date)";
            $statement = $objDb->prepare($sql);
            $statement->execute(array(':keyword' => $keyword, ':date' => $date));

            }

} catch(PDOException $e) {
    echo $e->getMessage();
}


}
?>

它不起作用..出了点问题。有人可以告诉我出了什么问题。 我不能使用主键。

1 个答案:

答案 0 :(得分:3)

您可以在字段日期和关键字

上设置唯一索引
ALTER TABLE  `search1` ADD UNIQUE (
`keyword` ,
`date`
);

编辑:看起来OP现在已经得到它,但为了完整性,上面的查询只运行一次以向表中添加唯一索引 - 请注意,如果您有相同的行,它将无法工作关键字和日期的值;如果您收到“重复值”错误,则必须先删除行,直到值再次尝试为止。

然后查询

INSERT INTO `search1` (`keyword`, `date`, `times`) VALUES (:keyword, :date, 1) ON DUPLICATE KEY UPDATE `times` = `times` + 1

应该做的伎俩:)