6

学习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 应该是唯一的。因此,如果行存在第一个查询失败,并且执行第二个更新......,但这感觉有点黑客......有没有更好的方法来做到这一点?

4

2 回答 2

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);
于 2013-03-08T05:45:05.057 回答
1

就我而言:

INSERT INTO assignment_status (user, assignment, status, note) VALUES (4, 7, 2, "My special note.")
ON DUPLICATE KEY UPDATE status=2, note="My special note."

请注意,我的主键由 2 列组成 -userassignmentID...

于 2017-08-14T19:04:34.017 回答