Счетчик переменных в SQLite - PullRequest
4 голосов
/ 05 января 2010

Я работаю над простым приложением todo, в котором есть столбец для каждого дня недели. При запуске приложение проверяет наличие незавершенных задач до текущей даты. Если это так, они перемещаются в верхнюю часть столбца текущей даты.

Приложение работает в облаке, но резервное копирование задач выполняется в автономном режиме с помощью базы данных SQLite. Я могу легко перемещать задачи, обновляя их свойство date, но мне нужно, чтобы свойство order каждой задачи увеличивалось, начиная с 0, чтобы разместить их сверху.

Мне нужно иметь возможность определять переменную count только в SQLite и увеличивать ее с каждым выполненным обновлением. Я знаю, что этот код не работает, но это простой способ объяснить, что нужно сделать:

count = 0

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

Я бы предпочел не использовать временную таблицу или использовать счетчик вне SQLite, если это возможно.

@ OMG Ponies - я начинаю думать, что это просто невозможно в SQLite.

Ответы [ 4 ]

3 голосов
/ 05 января 2010

Я бы сделал это со вторым оператором SQL:

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

Не проверено, но должно работать!

0 голосов
/ 05 января 2010

На самом деле, вы можете использовать дополнение в Sqlite - проверьте http://www.sqlite.org/lang_expr.html; вам просто нужно использовать дополнительный оператор UPDATE для увеличения счетчика и внутренний запрос, чтобы получить его снова. Обязательно сделайте все это в транзакции, иначе у вас возникнут проблемы с параллелизмом.

0 голосов
/ 05 января 2010

мне кажется, что вы хотите столбец подсчета для каждой строки. Если бы я был тобой, я думаю, ты мог бы сделать звонок как

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

Дай мне знать, как это работает ...

0 голосов
/ 05 января 2010

SQLite - отличный инструмент, но я бы удивился, если бы это было возможно при использовании JUST SQLite. Поддержка T-SQL в этом приложении не так уж велика.

Возможно, вы могли бы обновить существующее значение в записи; добавление или вычитание из него, но для этого потребуется, чтобы записи уже были в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...