php - MySQL 如果存在更新值,否则插入

标签 php mysql sql if-statement exists

我正在创建一个存储学生出勤情况的应用程序。

我正在创建用于存储此出勤情况的数据库,但我陷入了 mySQL 查询。

我希望查询搜索“讲座名称”和“user_id”(来自其他数据库的外键),如果存在,则增加学生的讲座出席率(出席人数++和总数++)

到目前为止我有这个:

    INSERT INTO `attendance`(`attendance_id`, `module_code`, `lecture_name`, 
`attended`, `total`, `user_id`) VALUES ("null","test","TEST",1,1,1)
   ON DUPLICATE KEY UPDATE 
 attended = attended+1,total = total+1                                                                                              

这将插入一个新行,但对于 ON DUPLICATE,无法传递主键来检查“重复”

我想知道除了 ON DUPLICATE KEY 之外,在 MySQL 中是否还有其他方法可以做到这一点,或者是否有人可以帮助我。

这是数据库的屏幕截图。例如,当“运筹学”应该增加值时,它就被创建了。这是因为我无法将主键添加到 SQL 查询中。

如果有任何帮助,我将不胜感激, 谢谢。

screenshot of the database

最佳答案

在双引号中使用 null 令人不安。所以,我认为你应该将查询编写为:

INSERT INTO `attendance`(`module_code`, `lecture_name`, `attended`, `total`, `user_id`)
    VALUES ('test', 'TEST', 1, 1, 1)
    ON DUPLICATE KEY UPDATE attended = attended + 1, total = total + 1 ;   

要实现此目的,您似乎需要在 (lecture_name, user_id) 上有一个唯一索引。

您的数据模型确实看起来很可疑,因为该表在多行上重复lecture_name。在我看来,您可能需要一个lectures 表并在此表中使用lecture_id

关于php - MySQL 如果存在更新值,否则插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43697831/

相关文章:

php - 我想用不同的值显示同一列两次 mysql

javascript - 基于 HTML 下拉选择填充输入

mysql - 在列中显示一次 GroupBy 公共(public)值

php - 如何使用 php 获取组合框的值?

php - 使用 WordPress 插件选项中存储的 Mysql 数据

sql - 在第一个结果后更改排序标准

mysql - 排序规则 ="A"在 MySQL 索引中意味着什么?

mysql - 我的返回结果是返回除一个以外的所有正确答案,没有错误

sql - 用替代方案替换 SQL Cursor 以提高性能

mysql - 我如何根据有限的日历为每个员工创建缺失的日期记录?