我正在检查数据库中是否已存在某个值,如果是,我只想更新last_date
以及将计数(visit_num
)更新为1.我'我不确定是否有更有效的方法来执行此操作,而不是通过运行查询来检索当前数字然后执行++
。这就是我目前所拥有的(没有检索列)。
function subscribe($visit_num, $email, $last_visit_date){
$sql = 'SELECT 1 from `visits` WHERE `email` = ? LIMIT 1';
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $email, PDO::PARAM_INT);
$stmt->execute();
if($stmt->fetchColumn()){
$totalVisits = /*Somehow retrieve the current count*/ + $visit_num;
$query = "UPDATE `visits` SET
`visit_num`=:visit_num,
`last_visit_date`=:last_visit_date
WHERE
`email` = :email";
// prepare query statement
$stmt = $dbh->prepare($query);
// bind values
$stmt->bindParam(":visit_num", $totalVisits);
$stmt->bindParam(":last_visit_date", $last_visit_date);
$stmt->bindParam(":email", $email);
$res = $stmt->execute();
if($res){
$arr = array('message' => 'Added');
echo json_encode($arr);
}else{
$arr = array('message' => "Error");
echo json_encode($arr);
}
}
我可以(在此之前)做一个“SELECT COUNT(*) FROM 'visits' WHERE 'email' = '$email'"
并添加它,但我不确定这是最好的方法还是有更好的方法。
答案 0 :(得分:0)
在一个声明中这样做:
UPDATE `visits` SET
`visit_num`=`visit_num` + 1,
`last_visit_date`=CURDATE()
WHERE
`email` = :email";
如果您需要知道应用程序中显示或下游逻辑的访问次数,请运行单独的选择,但这是一个不相关的用例。显然,您可以在此处切换出您需要的内容,例如将CURDATE()
更改为此函数的传入参数。
如果表中不存在此电子邮件,并且您要执行UPDATE失败的INSERT,您仍然可以使用INSERT...ON DUPLICATE KEY UPDATE syntax
在一个SQL语句中执行此操作