【问题标题】:How to insert a particular record only once per day in sqlite如何在sqlite中每天仅插入一次特定记录
【发布时间】:2013-04-20 05:54:12
【问题描述】:

我有一个名为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 查询来限制吗?

编辑

其实我正在制作一个学生网考勤的应用程序,我正在使用 QR_code 扫描编码的 roll_no。一旦学生第一次扫描其卡,它应该插入记录(即 id = 1),如果用户在同一天再次扫描它不应该插入。意味着一个特定的学生每天应该只有一次出勤记录。

【问题讨论】:

  • roll_no, date上放一个唯一键?
  • 为什么会有sqlitemysql 标签?您使用的是哪个数据库?
  • 我在 sqlite 和 mysql 中也必须这样做。
  • 不清楚您是想每天以编程方式插入一次,还是想避免拥有多个问题中描述的那种记录。此外,这不是 Android 相关问题。
  • 我已经编辑了这个问题。请立即查看

标签: android sqlite


【解决方案1】:

对于这两个数据库,对 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:

sqlite:

【讨论】:

    【解决方案2】:

    您可以在单个 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,您可以根据一个或多个条件更新现有行或插入新行。在这种情况下,如果该行不超过一天,我将使用 same 值更新该行。

    如果该行不存在或超过 1 天,您可以使用 COALESCE 分配新值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      相关资源
      最近更新 更多