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.