是否可以在同一个sql查询中进行插入或更新?

时间:2014-03-24 05:05:52

标签: php mysql sql

我有一个看似简单的问题,但我没有通过恶意来解决它

我有此表与网站访问者的统计数据

+-----------------------------+
+ date        | visits        +
+-----------------------------+
+  2014-03-17 | 198           +
+  2014-03-18 | 259           +
+  2014-03-19 | 94            +                 
+-----------------------------+

我的问题是将数据插入表中的正确方法是什么。

目前我在做的是:

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

$result = mysql_query("SELECT Count(*) as count FROM table WHERE date = '$date'");
$row = mysql_fetch_array($result);
$count = $row['count'];

if($count > 0){
mysql_query("UPDATE table SET visits = visits+1 WHERE date = '$date'");
}else{
mysql_query("INSERT INTO table (`date`, `visits`) VALUES ('$date', '1');");
}

这是更新表格的正确方法还是更好的方法?是否可以仅使用一个SQL查询来更新它,例如:

mysql_query("If row exists update table else insert");

我不知道这是否可行。

非常感谢您提前!如果你能帮助我,我将非常感激。

2 个答案:

答案 0 :(得分:2)

是的,如果您的date是表格中的关键

INSERT INTO `table`(`date`, `visits`) 
VALUES(`$date`, `1`)
ON DUPLICATE KEY UPDATE
`visits`=`visits`+1

参考:MYSQL:: INSERT ... ON DUPLICATE KEY UPDATE

注意:您正在使用已弃用的mysql_*个函数(表示已过时,不再受支持,不再修改),因此请尝试使用mysqli_*或{{1 }}

答案 1 :(得分:0)

尝试

INSERT INTO `tabelname`(`date`, `visits`) VALUES ($date,1) 
ON DUPLICATE KEY UPDATE `visits` = `visits`+1

注意:必须将date列设置为UNIQUE index

提示:不要使用mysql关键字作为列名(日期)

Reference