2015-08-03 3 views
-1

Один раз в день я получаю API, чтобы получить 50 последних сообщений с форума. Я храню эту информацию в базе данных, по одной строке за сообщение, храня ее в авторе, заголовке и PostID.Самый эффективный «игнорировать, если существует» в SQLite?

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

Я могу легко сделать это, сначала выбирая список всех PostID и сохраняя его как массив в моей программе, а затем удостоверяясь, что PostID не находится в этом массиве перед вставкой; но это кажется немым и неряшливым. Разумеется, в самой базе данных должен быть способ сделать это.

Я читал немного, и INSERT OR REPLACE работает, но также кажется, что это не «правильное» решение. Это также создало бы проблему, если бы я захотел изменить поле в строке - нажатие на API снова сбросило все поля до начальных значений.

Каков умный способ сделать это?

+0

Есть ли способ API для извлечения статей по ID? –

+0

Можем ли мы передать ID/Дата последней статьи, что у нас есть, и получить статьи, которые новее, чем это. Вместо того, чтобы получать 50 статей? Это также сэкономит вам некоторую пропускную способность. –

+0

'INSERT OR REPLACE работает, но также кажется, что это не« правильное »решение ... это работает? Тогда это ** - это «правильное» решение. –

ответ

0

Вы хотите INSERT OR IGNORE. Он будет тихо пропускать все дублированные вставленные строки и не будет изменять ранее существовавшие.

Для получения более подробной информации см. the ON CONFLICT clause documentation.

Смежные вопросы