Sitter här och funderar på om denna funktionen verkligen kommer fungera. Har testat lite genom att manipulera datumen i databasen. Den funkar om jag ställer fram ett datum på en annons 30 dagar eller en länk 10 dagar.
Men tanken är ju att den ska ta bort annonser som är 30 dagar gammla eller länkar som är 10 dagar gammla..
Så här ser det ut
function DateDiff ($to) {
$nto = explode('.', $to);
$nto = $nto[0].'-'.$nto[1].'-'.$nto[2];
$sec = strtotime($nto) - strtotime(date("Y-m-d"));
$days = round($sec / 86400);
return $days;
}
$doit = "SELECT date FROM annons WHERE aktiv ='1'";
$now = mysql_query($doit) or die ('Ett fel har uppstått');
$i = 0;
while($row = mysql_fetch_array($now, MYSQL_ASSOC)) {
$annonstid = $row['date'];
if (DateDiff($annonstid) > 30) {
$i++;
$doit2 = "DELETE FROM annons WHERE date ='$annonstid'";
$now2 = mysql_query($doit2) or die ('Ett fel har uppstått1');
}
}
echo "$i st annonser raderades <br /><br />";
//--------------------------------------------------------
function DateDiff2 ($to) {
$nto = explode('.', $to);
$nto = $nto[0].'-'.$nto[1].'-'.$nto[2];
$sec = strtotime($nto) - strtotime(date("Y-m-d"));
$days = round($sec / 86400);
return $days;
}
$doit = "SELECT date FROM links WHERE aktiv ='1'";
$now = mysql_query($doit) or die ('Ett fel har uppstått');
$o = 0;
while($row = mysql_fetch_array($now, MYSQL_ASSOC)) {
$annonstid = $row['date'];
if (DateDiff2($annonstid) > 10) {
$o++;
$doit2 = "DELETE FROM links WHERE date ='$annonstid'";
$now2 = mysql_query($doit2) or die ('Ett fel har uppstått2');
}
}
echo "$o st länkar raderades";
Hur fixar jag till koden så att när den körs, raderas datan som är 30 alt. 10 dagar gammalt
Som exempel
En annons skapades 2007.07.06, jag kör skriptet idag och eftersom dagens datum är 2007.08.05 (30 dagar senare) ska denna annons tas bort.
Detta var exempel på smidigare funktioner, men den egentliga lösningen måste nog ändå vara att du kör med riktiga datum i din databas och låter MySQL göra jobbet:
DELETE FROM annons WHERE aktiv=1 AND DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date
Kan också skrivas som:
DELETE FROM annons WHERE aktiv=1 AND CURDATE() - INTERVAL 30 DAY) <= date
För att få svar på hur många rader som togs bort så kör mysql_affected_rows().
Datumen som åker in använder denna funktionen och formateringen
$datum = date("Y.m.d");
Vilket då blir dagens datum
DELETE FROM annons WHERE aktiv=1 AND DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date
Verkar intressant. Men när du säger att man ska köra med riktiga datum, hur menar du då? Går det inte att använda min datumformatering med den sql-satsen ovan?
de funktionerna, både för 5.1 och upp och 5.0 och ner du postade innehåller båda syntaxfel enligt min utvecklinsserver. Provade rätt till dem..... visst, inga syntax fel.. men den blåste också alla annonser :D
de funktionerna, både för 5.1 och upp och 5.0 och ner du postade innehåller båda syntaxfel enligt min utvecklinsserver. Provade rätt till dem..... visst, inga syntax fel.. men den blåste också alla annonser :D
Jag kan ha missat någon parentes eller så. Poängen var att undvika onödig strtotime()
strtotime(date('Y-m-d')) är detsamma som time() Man får Unix-tid för "nu".
strptime() ger dig chansen att göra en slags omvänd strftime, där man anger uppbyggnaden av datumet för flexiblare tolkningsmöjligheter. Utan att ha kontrollkört min kod så borde den ge samma svar som din...
Verkar intressant. Men när du säger att man ska köra med riktiga datum, hur menar du då? Går det inte att använda min datumformatering med den sql-satsen ovan?
Din formattering kräver att datumen lagras som någon slags textsträng i MySQL-databasen. Troligen använder du varchar eller char.
Ooops! Det trodde jag inte. Tydligen är MySQL smartare än jag anade.
trodde inte heller det skulle funka, men det gör det. Sorteringen på datumen fungerar också, även fast dem är varchar. I mitt huvud förstår jag inte hur en text med siffror kan ha ett högre värde än en annan text med siffror..men det funkar.
266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849