Jump to content
php.lv forumi

Automātiskaierakstu dzēšana no MySQL


optimus

Recommended Posts

Vai kāds var ieteikt veidu, kā veikt automātisku ierakstu dzēšanu no MySQL pēc laika, izmantojot MySQL time funkcijas. Piemēram, izmantojot lauku kas satur TIMESTAMP vērtību, izdzēst ierakstu tieši pēc divām nedēļām (14 dienām). Vai to ar MySQL līdzekļiem var izdarīt? vai jāraksta skripts, kas katru dienu, piemēram, pirmajam apmeklētājam atverot lapu, vienkārši dzēš ierakstus, kuri ir vecāki?

Kā rīkoties! A!?

Link to comment
Share on other sites

a) * ja serveris pieļauj, uzlikt cron/ar uzdevumu, kas izsauks att. skriptu, kurš nodzēsīs vajadzīgo

 

B) pamatpierasījumos atlasīt tikai tos ier., kas jaunāki par 2 ned. (ja dzēšana nav obligāta)

 

c) * katru dienu pie katras lapas ielādes dzēst kaut kā baisi (var radīt lielu slodzi uz mysql), es izmantotu šito te:

 

@include_once('timeout.php');

if (empty($timeout))

{

$fp=fopen('timeout.php','w');

fwrite($fp,'<?php $timeout='.strtotime('+2 weeks').'; ?>');

fclose($fp);

}

elseif (gmmktime()>=$timeout)

{

mysql_query('DELETE LOW_PRIORITY FROM table WHERE `tstamp`<NOW()');

@unlink('timeout.php');

}

 

kas notiek:

tiek pievienots fails timeout.php, kurā būtu jābūt $timeout mainīgajam, kas ir timestamps tam brīdim, kad ieraksts tika dzēsts pēdejoreiz+2 nedēļas

 

att. ja $timeout nav/tukšs, šāds fails tiek noģenerēts, ja

ir, tiek pārbau'dīts, vai tekošais laiks nav pārsniedzis norādīto, un, ja ir, tiek dzēsti ieraksti + pats tiemout.php fails (viņš tiks noģenerēts no jauna pie nākošās lapas ielādes)

Link to comment
Share on other sites

Kas attiecās uz dzēšanu no PHP...

Ieteiktu izvērtēt tādu variantu:

$varbutiba = 5; //definējam varbūtību, ka atverot lapu tiks veikta dzēšana
if($varbutiba <= rand(0,100)){
//izpildām dzēšanas operāciju;
mysql_query('DELETE LOW_PRIORITY FROM table WHERE `tstamp`<NOW()');
}

 

$varbutiba optimālo vērtību nosaka empīriski, jeb citiem vārdiem "Методом научного тыка" :)

Link to comment
Share on other sites

Of course, ja vajag dzēst "laiku pa laikam", tad izmantojam Alekseja metodi.

 

Tikai zinātniskas pieejas pēc jābūt rand(1,100), citādi 101% sanāk (0,1...100=101 elements, ar varbūtību=5 izredzes "izkrist" ir [0,1...5] 6/101=5,9406%)

 

Jāņem vērā arī saita apmeklējums. Ja apmeklētāju skaits ir 300 dienā, tad raksti laikam tiks dzēsti biežāk, nekā vēlētos. (jāpalielina 100, uz vismaz 300 iekš rand)

Link to comment
Share on other sites

×
×
  • Create New...