如果密钥存在,则SQL更新行,否则更新默认行

时间:2014-11-11 05:24:22

标签: php mysql mysqli

这是我想要做的(伪代码)

if (dB entry exists) {
  UPDATE the dB entry
}else{
  UPDATE a default dB entry
}

这不是“INSERT INTO ... ON DUPLICATE”问题 我希望有一种UPDATE ... ON DUPLICATE类型的光滑代码可以在一行中完成。

我的代码根据$userName请求创建$_GET['U']。如果数据库中存在$userName(它是唯一键),则递增数据库中的计数器。否则,增加默认条目的计数器。

以下是我目前更新计数器的代码:

$userName = $_GET['U'];
$sql = "UPDATE `stats` SET `count`= `count` + 1 WHERE `userName` = '" . $userName . "'";
mysqli_query($conn,$sql);

如果此特定用户名不存在,我希望这种情况发生:

$sql = "UPDATE `stats` SET `count`= `count` + 1 WHERE `userName` = 'default'";
mysqli_query($conn,$sql);

3 个答案:

答案 0 :(得分:0)

你在找这个,

$userName = $_GET['U'];

$query_uname_exists = "SELECT count(*) FROM stats WHERE `userName` = '" . $userName . "'";

$uname_count        =  mysqli_query($conn,$query_uname_exists);

if($uname_count > 0){
    #update

$sql = "UPDATE `stats` SET `count`= `count` + 1 WHERE `userName` = '" . $userName . "'";
mysqli_query($conn,$sql);

}
else{
    #update default

    $sql = "UPDATE `stats` SET `count`= `count` + 1 WHERE `userName` = 'default'";
    mysqli_query($conn,$sql);
}

答案 1 :(得分:0)

这是我能为你缩减的最多:

$userName = mysqli_query($conn, "SELECT count(*) FROM stats WHERE `userName` = '".$_GET['U']."' LIMIT 1") == 0 ? 'default' : $_GET['U'];
mysqli_query($conn, "UPDATE `stats` SET `count`= `count` + 1 WHERE `userName` = '".$userName."' LIMIT 1");

答案 2 :(得分:0)

使用以下查询

$sql = "Update stats SET count = count + 1 where username =  (case when username= ". $userName ". then username else 'default' end)";