2016-07-01 4 views
0

У меня есть таблица вроде этого:Как удалить все истекшие строки старше одного года?

// cookies 
+---------+-------------------------+------------------+------------+ 
| id |   email   |  cookie  | date_time | 
+---------+-------------------------+------------------+------------+ 
| int(11) |  varchar(50)  | varchar(128) | int(11) | 
+---------+-------------------------+------------------+------------+ 
| 1  | [email protected]  | ojer0f934mf2... | 1467204523 | 
| 2  | [email protected]  | ko4398f43043... | 1467205521 | 
| 3  | [email protected] | 34fjkg3j438t... | 1467205601 | 
| 4  | [email protected]  | 0243hfd348i4... | 1467206039 | 
+---------+-------------------------+------------------+------------+ 

Я пытаюсь удалить все строки, которые истекли. expired означает все старые строки. старые строки означают каждую строку, которая старше одного года.

DELETE FROM cookies WHERE date_time < unix_timestamp() - (60 * 60 * 24 * 365) 

Но мой запрос кажется мне не нормальным. Есть ли лучший способ сделать это?

+1

'позапрошлом year' означает' дата_время

+0

, прежде чем в прошлом году означает старше чем один год или созданный в течение прошлого года –

+0

@ Lashane Знаете, я не очень хорошо знаю английский, поэтому, возможно, «до прошлого года» не верен. Строка действительна только один год. Поэтому я хочу удалить все строки, которые имеют меньше «date_time», чем год. –

ответ

2

Вы можете использовать DATE_SUB ПЕРИОД 1 год теперь

DELETE FROM cookies WHERE date_time < unix_timestamp(DATE_SUB(now(),INTERVAL 1 year)) 
+0

unix_time stamp добавлен .. – scaisEdge

+0

Думаю, не нужно этого 'from_unixtime()'. Поскольку значение столбца 'date_time' равно * unix time * –

+0

prom, то производительность будет медленной, чем оригинальная –

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