SQLite中的计数器变量

时间:2010-01-05 02:20:46

标签: sql actionscript-3 sqlite

我正在开发一个简单的待办事项应用程序,该应用程序每周的每一天都有一列。启动时,应用程序会检查当前日期之前是否有任何未完成的任务。如果是这样,它们将被移动到当前日期列的顶部。

该应用程序是基于云的,但是使用SQLite数据库备份了脱机模式的任务。我可以通过更新日期属性轻松移动任务,但我需要每个任务的order属性从0开始递增以将它们放在顶部。

我需要能够单独在SQLite中定义一个count变量,并在每次执行的更新时增加它。我知道这段代码不起作用,但这是解释需要做什么的简单方法:

count = 0

UPDATE `tasks` 
   SET `date` = '2010-01-04', 
       `order` = `count`++ 
 WHERE `date` < '2010-01-04'

如果可能,我宁愿不使用临时表或在SQLite之外使用计数器。

@OMG小马 - 我开始认为SQLite中的所有内容都不可能。

4 个答案:

答案 0 :(得分:3)

我会用第二个SQL语句:

UPDATE `tasks`
SET `date` = '2010-01-04',
count = ( SELECT COUNT(`task_id`) FROM `tasks` ) + 1
WHERE `date` < '2010-01-04'

未经测试但应该有效!

答案 1 :(得分:0)

SQLite是一个很棒的工具,但如果可以使用JUST SQLite,我会感到惊讶。在该应用程序中,T-SQL支持并不是那么好。

您可以更新记录中的现有值;添加或减去它,但这需要记录已经有序。

答案 2 :(得分:0)

实际上,您可以在Sqlite中使用添加 - 请查看http://www.sqlite.org/lang_expr.html;你只需要使用额外的UPDATE语句来递增计数器,并使用内部查询来再次获取它。确保在事务中执行此操作,否则您将遇到并发问题。

答案 3 :(得分:0)

对我来说,你想要每行的一个计数列。如果我是你,我想你可以做这个电话

UPDATE `tasks` 
SET 
`date` = '2010-01-04', 
count = count + 1
WHERE `date` < '2010-01-04'

lemme知道它是如何运作的......