私はMariaDBのテーブルを学生の学年で扱うつもりです。生徒が新しい成績を送るときは、最初に生徒の記録がテーブルにあるかどうかを確認する必要があります。はいの場合は、新しい成績が既存の成績より高い場合に更新します。生徒がテーブルに存在しない場合は、新しいレコードとして挿入します。続きこのジョブに対して1つのSQLクエリを書くことは可能ですか?select、then compare、insert/update
は($conn
がmysqli
オブジェクトで、簡単にするために、学生の名前はジョンと彼の新しいグレードが100であると仮定)私のPHPコードです:
$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
が主キーです。最悪の場合、上記のコードはテーブルを2回検索する必要がありますか?
コードはすでに簡単です。単一のSQL文でそれを作成しようとすると、読みやすく理解しにくくなります。それはすでに大丈夫です。あなたが1つのコードでそれを必要とするより具体的な理由はありますか? –
@JorgeCampos 'insert ... duplicate key update'をここで使うことができますか?最悪の場合、上記のコードはテーブルを2回検索する必要がありますか? –