Alter Datensatz nach Datum löschen

creativeheadz

Erfahrenes Mitglied
Hallo,

ich würde gerne alle Datensätze die älter als das aktuelle datum sind aus der DB löschen.

Meine Idee:

In meiner MySQL Tabelle habe ich ein Datumfeld date mit der bezeichnung "ABIS".

Hier steht das Datum in folgendem Format, bis wann der Datensatz in der DB stehen soll.

Bsp.:

2009-11-30


Nun habe ich ein wenig gegooglet und bin auf NOW() gestoßen.

PHP:
$dlt = "DELETE FROM anegbote WHERE ABIS < NOW()";
mysql_query($dlt);

Leider bleiben aber alle Datensätze in der DB stehen. ohne das sich die alten löschen


lg
 
NOW() ist jetzt (Datum und Zeit) und wird als String ausgegeben. Das kannst du ev. nicht direkt mit einem Datum vergleichen. ggf kann man as ein ein reines Datum konvertieren

DATE(NOW())

Du willst sowieso ein spezielles Datum in einem speziellen String-Format verwenden. Dazu eignet sich STR_TO_DATE().

SQL:
DELETE 
FROM
	anegbote 
WHERE 
	abis < STR_TO_DATE('2009-11-30', '%Y-%m-%d');

Wobei dein Format dem Standart-Datumsformat von MSQL entspricht. Ergo müsste das folgende eigentlich auch gehen.
SQL:
DELETE 
FROM
	anegbote 
WHERE 
	abis < '2009-11-30';
 
Zuletzt bearbeitet von einem Moderator:
Hey danke erstmal für deine Antwort.

PHP:
$dlt= "DELETE FROM anegbote WHERE ABIS < STR_TO_DATE(2009-12-01, '%Y-%m-%d')";
mysql_query($dlt);

Es ist ein Datensatz vorhanden, mit dem Wert 2009-12-01 im Feld ABIS. Gelöscht wird dieser jedoch nicht.
 
Dann studiere bitt mal die Vergleichsoperatoren
>
>=
=
<
<=
<>
Du darfst jetzt selber einen aussuchen.

Sorry für mein Sarkasmus, aber ein wenig selber studieren schadet nicht.
 
Gib mal ein Dump deiner Tabelle, dann seh ich besser was da wirklich drinne ist

(phpmyAdmin -> Tabelle auswählen -> export -> SQL, Struktur und Daten auswählen
 
Ah hatte mich in meinem query oben vertippt es heißt natürlich angebote und nicht anegbote. Daran lags aber nicht.

Hier der Dump

Code:
CREATE TABLE IF NOT EXISTS `angebote` (
  `ANAME` varchar(255) NOT NULL,
  `VMENG` varchar(255) NOT NULL,
  `MINAB` varchar(255) NOT NULL,
  `NPREIS` varchar(255) NOT NULL,
  `AVOM` date NOT NULL,
  `ABIS` date NOT NULL,
  `BESCH` text NOT NULL,
  `LIEFER` varchar(255) NOT NULL,
  `PAYMENT` varchar(255) NOT NULL,
  `UID` varchar(255) NOT NULL,
  `KID` varchar(255) NOT NULL,
  `AID` int(11) unsigned NOT NULL auto_increment,
  `PIC` varchar(255) NOT NULL,
  `LSERVICE` varchar(255) NOT NULL,
  `GALERIEPIC` varchar(255) NOT NULL,
  `SUBTITLE` varchar(255) NOT NULL,
  `AMARK` varchar(255) NOT NULL,
  `ATOP` varchar(255) NOT NULL,
  PRIMARY KEY  (`AID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

--
-- Daten für Tabelle `angebote`
--

INSERT INTO `angebote` (`ANAME`, `VMENG`, `MINAB`, `NPREIS`, `AVOM`, `ABIS`, `BESCH`, `LIEFER`, `PAYMENT`, `UID`, `KID`, `AID`, `PIC`, `LSERVICE`, `GALERIEPIC`, `SUBTITLE`, `AMARK`, `ATOP`) VALUES
('Testartikel', '20', '2', '200,90', '2009-11-24', '2009-12-01', 'test', '2-4 Tag(e)', 'test', '1', '13', 17, '73785x340.jpg', 'anderer Lieferservice', '1', '', '', '');
 
Danke. Habs mal getestet.

item: da das Datum schon im MySQL-Datum vorhanden ist, kann man sich das STR_TO_DATE() schenken

item: hast du beim umsetzen um das Datum im Filter die ' ' vergessen. Das Datum im Filter ist ein String.

SQL:
DELETE FROM angebote WHERE ABIS <= '2009-12-01';
 
Zuletzt bearbeitet von einem Moderator:
Zurück