Чистене на стари данни от БД

diabolic_bg

Registered
Здравейте!
Инсталирах си кода от урока на human "Последни влизания от Yahoo и Google". Всичко работи прекрасно, но има нещо, което не ми харесва - дневно се събират около или над 200 записа, които се трупат всеки ден и базата расте лавинообразно.
Опитах се да си напиша код, който да чисти данни по-стари от 2 дни, но не съм много в час с материала и явно правя грешка във въвеждането на датите. Като резултат при пробата, скриптът изтри всички записи до момента в тази таблица.
Ето го кода:

Код:
// cleaning
$ddata=$data+2; // От тук настрой записите, по-стари от колко дни да трие 
$data=date("d.m.y"); 
$ttd=$data-$ddata; 
$sql = mysql_query("DELETE FROM `search` where data<='$ttd'");

Подозирам, че грешката ми е в $ddata=$data+2; но не знам точно как да задам датата плюс два дни.
Моля някой сведущ да ми помогне!

П.П. До модераторите
Съжалявам, одеве бях объркал форума!
Не виждам добре и на всеки може да се случи да обърка форума. Нищо не ви пречеше да преместите поста ми вместо да го изтриете и аз да чакам напразно отговор...
 
Ако преправиш малко кода на @human , и записваш времето във Unix формат , взето с time() , после самото чистене ще стане много по-лесно.Ако го преправиш , просто скрипта за чистене ще ти представлява нещо от сорта на
<?php
$before_two_days = strtotime('-2 days');
$mysql = mysql_query("DELETE FROM `таблицата` WHERE `времето` < '$before_two_days'") ? "ок" : "възникна някакъв проблем";
echo $mysql;
?>
 
Доста сложен вариант ми се струва. Трябва на куп места да променя датата да се замести с време, а и в самата таблица е зададено да приема дата, а не час. Вероятно ще трябва да се направи нова графа в таблицата, ама ако знаех как, нямаше да търся помощ... :oops:
 
не просто направи колонката за датата в тип инт

и не записвай в нея с date(); а с time();
 
Промених датата на $data = time();
промених и в таблицата типа на датата на INT.

Твоят код става на:

Код:
$before_two_days = strtotime('-2 days'); 
$mysql = mysql_query("DELETE FROM `search` WHERE `time()` < '$before_two_days'") ? "ок" : "възникна някакъв проблем"; 
echo $mysql;

Това достатъчно ли е и как да пробвам дали работи или трябва да изчакам два дни? Както бях писал при първия си опит изтрих старите записи и сега имам само от 1-2 часа.

П.П. Като качих така преработения файл получих съобщение "възникна някакъв проблем".
 
Най-лесно , изчакай няколко дни , експортни си таблицата някъде другаде и тествай някъде другаде.И направи кода така
$before_two_days = strtotime('-2 days');
mysql_query("DELETE FROM `search` WHERE `time()` < '$before_two_days'")or die(mysql_error());
echo "ok";
 
За съжаление нямам къде да експортна таблицата, но съм на личен сървър, така че мога да си пробвам колкото ми душа иска. :)
В момента тествам един друг вариант, който си пригодих от друг код и засега като че работи. Само че и при него, както в твоя на екрана ми излиза една странна цифра вместо реалното време на записа, но това не е болка - просто ще премахна извеждането на време, то и не е съществено в колко часа някой е търсил нещо си...

Но ще опитам и твоя следващите дни и ако става, непременно дори и със закъснение ще ти дам точката, дори само затова, че единствен се опита да помогнеш. :)
 
виж аз как го права
записал сам си датата на качване на файла после я извеждам и
да кажем променливата на мен ми е $date
после
Код:
$id = $_GET['id'];
$row = mysql_fetch_array(mysql_query("SELECT * FROM `files` WHERE `id` = '$id'"));
$date  = $row['date'];//12-05-09 така си го записвам аз 
$del = explode("-", $date);
$del1= "$del[0] + 2";
$date1 =  date('d-m-y');
$del2 = explode("-", $date1);
if("$del1" == "$del2[0]"){
mysql_query("DELETE FROM `files` WHERE `id` = '$id'"));
}else{
echo " ";
}
самоче при теб ще е малко по различно нещо като
Код:
$row = mysql_fetch_array(mysql_query("SELECT * FROM `files` "));
$date  = $row['date'];//12-05-09 така си го записвам аз 
$del = explode("-", $date);
$del1= "$del[0] + 2";
$date1 =  date('d-m-y');
$del2 = explode("-", $date1);
if("$del1" == "$del2[0]"){
mysql_query("DELETE FROM `files` WHERE `date` = '$date'"));
}else{
echo " ";
}
и си го отваряш от време на време
 
@sorRy, благодаря за съвета, но ако идеята беше да чистя ръчно, аз мога да си го правя през phpMyAdmin, но целта е да се автоматизират тези процеси, за да не ги мисля. Имам твърде много работи на главата, сам съм си екип на сайта, а трябва да храня и двама студенти, та хич не ми се мисли за такива дреболии... :D
Смятам, че кодът, който в момента изпробвам, ще ми свърши работа, защото обърнах всички параметри свързани с дата в тайм като промених и графата в таблицата от дата на тайм и съм задал чистенето със скрипт, който вече ползвам на друго място - ще чисти след 172800 секунди всички по-стари записи. За момента като си гледам в базата, всичко си върви ОК.
Ако не сработи след два дни, тогава ще търся друг вариант.
 
това което ти дадох не е ръчно ти няма как да накараш php файл да работи сам без да го отваряш от време на време
 
Точката получи Replace, защото макар че не използвах неговата система, той ме наведе на правилната мисъл - да обърна датата във време и тогава се сетих как да го направя като цяло.

П.П. Не съм пробвал кода на Replace и не мога да кажа дали работи, ако някой реши да го ползва.
 

Горе