Увеличение значения для всей базы данных - PullRequest
1 голос
/ 12 сентября 2011

Итак, у нас есть база данных. Время от времени мы добавляем новый набор данных, и самый старый набор данных должен быть удален.

Скажите, что БД - начало июня: 18 записей, конец июня: 15 записей, август: 23 записи. Когда мы добавляем следующие записи, мы хотим удалить записи начала июня. Однако добавление новых данных не совсем регулярно. Моя вторая мысль - иметь поле «oldness» для каждой записи, и перед добавлением нового набора данных увеличить все поля «oldness» на 1, а затем удалить все данные со «oldness», равным 3.

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

Ответы [ 3 ]

2 голосов
/ 12 сентября 2011

Я предполагаю, что ваши данные хранятся таким образом, что в каждом отчете есть столбец метки времени (даты), и вы всегда хотите удалить данные, которые x (в данном случае 3) месяца.Если это так, вы можете подумать об использовании функции mysql DATEDIFF.

Например, это может выглядеть примерно так:

DELETE from table1 WHERE datediff(CURRENT_DATE(), datecol) > 89

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff

0 голосов
/ 12 сентября 2011

С небольшой помощью user937146 Я думаю, что у меня есть решение. В основном

$query = "SELECT MIN(timestamp) FROM new_items WHERE type = 'Book' ";

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

0 голосов
/ 12 сентября 2011

Всегда ли по месяцам?

UPDATE table SET status = "oldness" WHERE date_inserted <= NOW() - INTERVAL 3 MONTH
...