如何在sqlite中每天只插入一次特定记录

时间:2013-04-19 21:22:53

标签: android sqlite

我有一个名为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),如果用户在不应该插入的同一天再次扫描它。意味着特定学生每天只能有一次出勤记录。

2 个答案:

答案 0 :(得分:2)

对于这两个数据库,请在roll_nodate上创建一个唯一的键约束。

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分配新值。

我知道这只是一种轮廓,但可能会有所帮助......干杯!