【发布时间】:2017-09-24 14:54:38
【问题描述】:
我将在 MariaDB 中处理学生成绩表。当学生发送新成绩时,我需要先检查表中是否存在学生的记录,如果存在,则更新新成绩是否高于现有成绩。如果学生不存在于表中,则作为新记录插入。
以下是我的 PHP 代码(为简单起见,假设学生姓名是 John,他的新成绩是 100,$conn 是 mysqli 对象):
$result = $conn->query("select name, grade from grade_sheet where name='john' and grade<100");
if ($result->num_rows > 0) {
$conn->query("update grade_sheet set grade=100 where name='john'");
} else {
$conn->query("insert into grade_sheet (name, grade) values ('john', 100)");
}
是否可以简化代码?更具体地说,可以像insert ... on duplicate key update这样使用吗?
这里name 是主键。是不是,在最坏的情况下,上面的代码需要查表两次?
【问题讨论】:
-
你的代码已经够简单了。尝试在单个 sql 语句中创建它会使其更难阅读和理解。它已经很好了。您是否有更具体的原因需要在一个代码中使用它?
-
@JorgeCampos 我的意思是如果
insert ... on duplicate key update可以在这里使用?最坏的情况,上面的代码需要查表两次?