我有一个名为Attendance
的表,这是下面给出的结构。
id fname lname roll_no date time
________________________________________________________
1 Qadir Hussain 08cs18 19/04/2013 8:45am
2 Qadir Hussain 08cs18 19/04/2013 8:50am
_______________________________________________________
我想每天只插入一次roll_no = 08cs18
的记录。每天不超过一次。
我可以通过if/else
对此进行限制。但是可以通过sqlite查询来限制吗?
修改
我正在制作一个应用于studnets的应用程序,我使用QR_code扫描编码的roll_no。一旦学生第一次扫描其卡片,它应该插入记录(即id = 1),如果用户在不应该插入的同一天再次扫描它。意味着特定学生每天只能有一次出勤记录。
答案 0 :(得分:2)
对于这两个数据库,请在roll_no
和date
上创建一个唯一的键约束。
CREATE UNIQUE INDEX daily_roll_no ON Attendance (roll_no,date)
然后对于mysql,使用IGNORE
子句进行插入。对于sqlite,请使用OR IGNORE
。
INSERT IGNORE INTO Attendance ....
INSERT OR IGNORE INTO Attendance ....
MySQL的:
源码:
答案 1 :(得分:1)
您可以在一个SQL中执行此操作:
INSERT OR REPLACE INTO <tablename>
(<identifier>, <time inserted>, column1, column2, ...)
SELECT <identifier>, <time inserted>,
COALESCE(column1,'new value 1'),
COALESCE(column2,'new value 2'), ...
FROM <tablename>
WHERE <identifier> = ...
AND <time inserted> > <now minus one day>
基本思想是:使用INSERT OR REPLACE
您可以根据一个或多个条件更新现有行或插入新行。在这种情况下,如果行不超过一天,我会使用相同的值更新行。
如果该行不存在或超过一天,您可以使用COALESCE
分配新值。
我知道这只是一种轮廓,但可能会有所帮助......干杯!