Mysql:如果行不存在则插入,否则更新..是否有更简单的命令?

时间:2013-03-08 05:34:15

标签: mysql

学习Mysql并有大量问题......

我可以通过简单的方式达到预期的效果:

$mysqli->query("INSERT results SET user_id = '".$user_data[0]['user_id']."', logo_id = '".$mysqli->real_escape_string($_GET['logo_id'])."'");
$mysqli->query("UPDATE results SET result_tries = result_tries +1 WHERE logo_id = '".$mysqli->real_escape_string($_GET['logo_id'])."' AND user_id = '".$user_data[0]['user_id']."'");

我在桌面上有数据库unique check,因此logo_id和user_id应该是唯一的。因此,如果存在行,则第一次查询失败,并执行第二次更新...,但这感觉有点破解......有更好的方法吗?

2 个答案:

答案 0 :(得分:9)

尝试

$user_id = $user_data[0]['user_id'];
$logo_id = $mysqli->real_escape_string($_GET['logo_id']);

$sql = "INSERT INTO results (user_id, logo_id, result_tries) 
        VALUES ('$user_id', '$logo_id', 0)
            ON DUPLICATE KEY UPDATE result_tries = result_tries + 1";

$mysqli->query($sql);

答案 1 :(得分:1)

这是我最优雅的解决方案,因为我没有任何唯一的索引列,需要使用where子句才能实现我的目标:

DELETE FROM assignment_status WHERE assignment_id = 114 AND user_id = 1;
INSERT INTO assignment_status (assignment_id, user_id, status, note) VALUES (114, 1, 2, "Some useful information goes here...");

感谢Stack Overflow thread(也在那里找到解释)。