Изтриване на публикации по стари от 3 месеца

Zion

Registered
Здравейте, доста си играх но все нещо немога да нацеля това с датите при изтриване на публикации по стари от 3 месеца. Имам поле в базата данни `date` и записвам времето по следния начин $date = date('d-m-y g:i');

Въпроса ми е как да изтривам публикации по стари от 3 месеца? Каква заявка да използвам :)

Благодаря предварително
 
PHP:
$before = date('d-m-y g:i',strtotime("-3 month"));
echo "DELETE FROM table WHERE date <= {$before}";
П.П. Много по-добре ще е да записваш времето в колона тип DATE/DATETIME/TIMESTAMP. Хем по-удобно ще си боравиш с датите, хем и няма да се налага да пресмяташ аджеба колко е 3 месеца назад и така да триеш.
 
ми нестава пак :S правя заявката да изкарва публикациите по стари от 3 месеца по следния начин
$select = mysql_query("SELECT * FROM `posts` WHERE date <= $before ORDER BY id DESC");

и не ми изкарва нищо, а съм променил датите на 2,3 поста
 
Огради date в апострофи, защото предполагам не ти трябва or die(mysql_error()),а тогава щеше да видиш грешка :idea:
П.П. При смяната на датата, да не си объркал месец/дата?
 
добре де, сложих or die(mysql_error()) и излезе грешка, оправих я какво ли друго не правих обаче не ми излизат реално обявите които са по-стари от 1 месец... излизат само няколко, дори махнах равното и оставих само < но пак не...

Та да речем, че записът ми в ДБ ще е този date() без d-m-y каква трява да е заявката която ще ми показва обявите които са на повече от 1 месец, и ако може на 3 месеца. Тези сегашните като се наложи ще ги трия ръчно. Благодаря предварително!
 
Гледах уроци и стигнах до решението, че дата в базата се записва така:

В php

INSERT INTO table (data) VALUES ('.time().')


Във phpmyadmin се прави поле data на която му задаваме тип да е INT и когато ти се запише дата в поле data трябва да излизат нещо като тези цифри 1300495755 (това е unix timestamp ).

Ако се чудеш тези цифри как да ги направиш после обратно във дата, час и минути.
След селекта от таблицата със времето:


echo date('Y-m-d H:i:s' , $row['data']);
 
[sql]DELETE FROM таблица WHERE date(колона с дата) <= CURRENT_DATE - INTERVAL 3 MONTH[/sql]

вместо 3 MONTH можеш да сложиш 93 DAY, или каквото друго решиш :) Няма нужда да правиш отделни изчисления в PHP кода - директно sql заявката си изпълнявай :)
 
значи селекта да стане така
SELECT * FROM `posts` WHERE `date` <= CURRENT_DATE - INTERVAL 3 MONTH
 
Zion каза:
значи селекта да стане така
SELECT * FROM `posts` WHERE `date` <= CURRENT_DATE - INTERVAL 3 MONTH

Е, ти нали искаш да ги триеш, сега защо ще ги селектираш ?

Иначе...

[sql]
SELECT * FROM `posts` WHERE date(`date`) <= CURRENT_DATE - INTERVAL 3 MONTH
[/sql]
 
Ами искам първо да видя какво ще изтрие, аз най-лесно ще променя заявката на DELETE но ако изтрие постове които не са за триене... а все пак сайта ми е онлайн :)

Пак нещо не се получава
правя заявката така WHERE date(`date`) <= CURRENT_DATE - INTERVAL 1 MONTH ORDER BY id DESC

и ми излизат едни постове, след това да проверя всичко дали е ОК правя INTERVAL 2 DAY и отново излизат всичките постове, а би трябвало всички да излязат...
 
Предполагам си сменил типа на полето да е DATE,DATETIME или TIMESTAMP?
 
Ами всъщност, не. Предположих, че и така ще стане :)

Значи променливата която записва в ДБ да бъде

$date = date();
Това ли е най-добрия вариант ? :)
 
Мм, промених си полетата в ДБ като тип DATE но нещо много странно се случи :D Всичките ми записи се промениха по следния начин: 2030-05-10, 2012-03-11
 
Полетата трябва да ги записваш с date("Y-m-d H:i:s"), ако ползваш DATETIME или TIMESTAMP, а ако ползваш само DATE махаш часа.
Но ако тепърва ще сменяш полеот в базата данни, ще е по-добре да си напишеш скрипт, който да смени датата.
Да вземе сегашната и да я преобразува в тоя формат.
 
а някакви идеи как да конвертирам сегашната дата в тип като този който направих, т.е. Y-m-d ?
 
PHP:
$oDate = new DateTime(date('d-m-y g:i'));
echo $oDate->format('Y-m-d');

Ти наистина ли записваше до сега годините, чрез тоя формат y (малко y)? Ако си ...
$oDate = new DateTime(date('d-m-20y g:i'));
echo $oDate->format('Y-m-d');
:?:
 
Написах ти пост на миналата страница с unix timestamp и после как се вадят.
 

Back
Горе