optimus Posted July 2, 2004 Report Share Posted July 2, 2004 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 More sharing options...
Venom Posted July 2, 2004 Report Share Posted July 2, 2004 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 More sharing options...
optimus Posted July 2, 2004 Author Report Share Posted July 2, 2004 Es šo lietu apdomāšu, - paldies! Tikai biju iedomājies ka ir kaut kādi man nezināmi tieši MySQL līdzekļi. Protams, arī šis vaiants ir visnotaļ labs! Link to comment Share on other sites More sharing options...
Aleksejs Posted July 2, 2004 Report Share Posted July 2, 2004 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 More sharing options...
Venom Posted July 2, 2004 Report Share Posted July 2, 2004 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 More sharing options...
Venom Posted July 2, 2004 Report Share Posted July 2, 2004 Of course, ja vajag dzēst "laiku pa laikam", tad izmantojam Alekseja metodi. Tikai zinātnisk Link to comment Share on other sites More sharing options...
Recommended Posts