我正在创建一个存储学生出勤情况的应用程序。
我正在创建用于存储此出勤情况的数据库,但我陷入了 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 查询中。
如果有任何帮助,我将不胜感激, 谢谢。
最佳答案
在双引号中使用 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/