cybton.com
Über uns | Jobs | Werbung | Sitemap | AGB | Impressum | Hilfe ?
 Kostenlos anmelden)
wichtigWir suchen PHP-Entwickler/innen (Freelancer oder Vollzeit)
Forum
Aktuellste Beiträge
Forenregeln

Community
BB-Codes
Tags
Chat
Suche (Web)
Wer ist online?
Top-User

Basar


Statistik
Mitglieder gesamt: 69394
Mitglieder online: 0
Gäste online: 4
mehr...

Anzeige
Forum » Forum: Website & Webprogrammierung » Thread: MYSQL eintrag nach einem erreichtem Datum Löschen

Thread: MYSQL eintrag nach einem erreichtem Datum Löschen


21.08.2010 13:04 Uhr

 

Status: offline
Hallöchen

Ich möchte aus meiner MYSQL-DB einträge löschen die länger als 3 Monate zurück liegen!

Das Datum wird im format 2010-08-21 gespeichert!

Die Tabellen struktur sieht so aus
Zitat von MYSQL-DB:
datum | varchar(10) | latin1_swedish_ci | Nein | Kein


und ich dachte mir eigendlich so aber es macht es nicht!
PHP:
1
2
3
$time = date("Y-m-d");
 
mysql_query("DELETE FROM short WHERE `datum´ < '$time'");
Wie immer bin ich über Tipps dankbar.  :glad: 
1 mal bearbeitet
___________________________
Mein System - Tortys-Welt
21.08.2010 13:47 Uhr

 

Status: offline
Ich weiß nicht, ob MySQL so einen Vergleich mit Strings machen kann. Ich würde einfach die UNIX-Zeit benutzen.
1 mal bearbeitet
21.08.2010 13:54 Uhr

 

Status: offline
meine erste frage wäre: warum speicherst du denn ein datum als string? mysql hat extra den datentyp date.
weiter wäre es interessant zu wissen, wie genau du es mit den drei monaten nimmst. wenn du sagst: "es reicht mir, wenn jeder monat pauschal 30 tage hat", dann könnte dir diese abfrage weiterhelfen:
mysql:
1
delete from short where datediff(curdate(), datum) >= 90
wenn du aber wirklich genau auf den monat gucken willst, dann musst du tages- und monatszahl einzeln vergleichen:
mysql:
1
2
3
delete from short where
  (month(datum) + 3) < month(curdate()) or
  ((month(datum) + 3) = month(curdate()) and day(datum) < day(curdate()))
hier ist aber der jahreswechsel noch nicht berücksichtigt, also muss dies in einer weiteren bedingung ebenfalls noch geprüft werden:
mysql:
1
2
3
4
5
6
7
delete from short where
  (month(datum) + 3) < month(curdate()) or
  ((month(datum) + 3) = month(curdate()) and day(datum) < day(curdate())) or
  (month(datum) > month(curdate()) and year(datum) < year(curdate()) and
    ((month(datum) + 3) < (month(curdate()) - 12)) or
    (((month(datum) + 3) = (month(curdate()) - 12) and day(datum) < day(curdate())))
  )
da das ganze jetzt aber recht lang geworden ist kann es gut sein, dass da fehler drin sind, ich bin nämlich grad zu faul zu testen. ich würde dir jedoch eh vorschlagen, die obere möglichkeit zu nehmen. da hast du dann zwar ungenauigkeiten von 1-2 tagen drin, aber ich denke das ist bei 3 monate alten daten eh nicht so wichtig. ich weis ja nicht aus welchem zusammenhang deine datenbank ist.

wenn du dich nicht dazu durchringen kannst deine daten als date oder datetime zu speichern, dann musst du in die funktionen oben jedes mal wenn deine spalte datum referenziert wird das wort "datum" durch str_to_date(datum, '%Y-%m-%d') ersetzen, da man mit strings nicht wirklich rechnen kann.
___________________________
while (!asleep()) sheep++;
21.08.2010 14:08 Uhr

 

Status: offline
PHP:
1
$sql = "DELETE FROM `short` WHERE `datum` < FROM_UNIXTIME(". (time() - 7614000) .");"
7.614.000 = 3 Monate in Sekunden

Und: IMMER backticks verwenden um Tabellen und Spaltennamen anzugeben!

Edit: Gerade gesehen... du solltest, wie oben schon angemerkt, das Datum nicht als String speichern... MySQL bietet dir die String-ähnlichen Typen "DATE" und "DATETIME" an. Wenn du die ohne spezielle Funktionen abfrägst bekommst du einen String zurück.
3 mal bearbeitet
___________________________
<(^^ )>
21.08.2010 14:23 Uhr

 

Status: offline
Ja danke, die erst variante von PARN geht!
___________________________
Mein System - Tortys-Welt
21.08.2010 17:19 Uhr

 

Gelöscht #671
Programmierer
Status: offline
Was ich aber eigentlich sagen wollte: Ich hab in diesem Thread noch nicht das Stichwort "DATE_ADD" / "DATE_SUB" gesehen, deshalb will ich das mal einwerfen. Das wäre die beste Möglichkeit, alles zu löschen, was älter als 3 Monate ist (wenn man den Spaltentyp DATE oder DATETIME verwendet).
MySQL:
1
DELETE FROM `short` WHERE `datum` < DATE_SUB(NOW(), INTERVAL 3 MONTH)
Wichtig ist dabei, dass DATE_SUB auf den festen Wert (in dem Fall NOW()) und nicht auf die Spalte datum selbst angewendet wird, da sonst deine Performance den Bach runtergeht. Außerdem muss auf der Spalte datum ein Index liegen.
1 mal bearbeitet
Ähnliche Threads Forum Ähnlichkeitsgrad
 MySql-Eintrag löschen, wenn auf Link "löschen" geklickt wird Website & Webprogrammierung 2
 Mysql-Datum zerlegen bzw. sortieren Website & Webprogrammierung 2
 Datum vergleich mit MYSQL Website & Webprogrammierung 2
 Geburtstagsliste in MYSQL Website & Webprogrammierung 2
 [gelöst] Mit Datum rechnen in PHP mit MySQL Website & Webprogrammierung 2
 [gelöst] Fragen bezüglich MySQL Website & Webprogrammierung 1
 [gelöst] [MySQL] - Seitenumbruch nach z.B. 10 Postings Website & Webprogrammierung 1
nach obennach oben

Copyright © 2014 cybton-network

Google
Partner: #Musik - Dein Internetradio - nexem. - .wir machen news
ANEXIA - PHP Entwicklung - Web-Entwicklung - Fritz!Box Anrufmonitor für Mac OS - Rolladen, Markisen und Jalousien in Stuttgart - Rolladen in Stuttgart - SMSjobs