[MySQL] Tabellen nur bestimmte Inhalte löschen oder lerren **gelöst**

Murdoch

Eurofriend.de Webb
27 April 2006
2.994
289
Hallo!

Hab mal ne Frage ich habe in einer Datenbanktabelle 2 Mio Einträge und möchte aber nur die ersten 1,5 Mio Einträge löschen oder lerren, wie kann man das realisieren. Bis jetzt hatte ich immer die ganzen Einträge gelöscht oder gelerrt das möchte ich aber nicht. Theoretisch möchte ich z.B alle Einträge bis zum 30.April löschen oder eben die ersten 1,5 Mio Einträge.

Danke schonmal für die Antwort. Ich nutze Cofixx mit phpmyAdmin.
 
Zuletzt bearbeitet:
Code:
delete from Tabelle order by id limit 150000
oder wenn du eine bedinung haben willst wie z.b. die einträge die ein bestimmtest alter überschritten haben sowas wie z.b. alle einträge die älter als 30 Tage sind (wenn es eine zeile gibt die als unixtimestamp gespeichert ist)
Code:
delete from Tabelle where zeit < unix_timestamp - 30*86400
oder halt andere where-Bedingungen

Alles in der SQL-Ansicht unter phpmyadmin.

edit
habe das order by vergessen bei meinem alten code wären irgendwelche 150000 gelöscht worden.

MfG respawner
 
Zuletzt bearbeitet:
für das mit dem 30.April brauchen wir schon deine db strucktur

aber das löschen der ersten 1,5mio sollte so gehen

PHP:
DELETE FROM `Tabelle` ORDER BY `id` ASC LIMIT 0, 1500000

id Ordnung nur wenn du ein Feld mit dem Namen hast

sollte funzen -->nicht getestet
 
strolch00 schrieb:
für das mit dem 30.April brauchen wir schon deine db strucktur

aber das löschen der ersten 1,5mio sollte so gehen

PHP:
DELETE FROM `Tabelle` ORDER BY `id` ASC LIMIT 0, 1500000

id Ordnung nur wenn du ein Feld mit dem Namen hast

sollte funzen -->nicht getestet


ah okay schonmal sehr gut:

Hier mal die Struktur für z.B 30 April

Tabelle heißt Konto
Spalten: UserID, Zeit; BuchungsID; Menge; Zweck
 
Murdoch schrieb:
Hier mal die Struktur für z.B 30 April
Das sind die Spaltennamen ;)

Geh im phpMyAdmin auf SQL und tipp folgendes ein:
SHOW CREATE TABLE `Konto`

Die vollständige Ausgabe postest du. Dann kennen wir die Struktur.
 
Table Create Table
fuco_buchungen_konto CREATE TABLE `fuco_buchungen_konto` (
`uid` int(7) NOT NULL default '0',
`buchungszeit` int(10) NOT NULL default '0',
`buchungs_id` varchar(14) NOT NULL default '',
`buchungsmenge` double(10,2) NOT NULL default '0.00',
`verwendungszweck` varchar(40) NOT NULL default '',
KEY `uid` (`uid`),
KEY `buchungszeit` (`buchungszeit`)
) TYPE=MyISAM
 
Murdoch schrieb:
`buchungszeit` int(10) NOT NULL default '0',
Die Zeit ist als ein int mit Länge 10, heisst aber nicht dass es auch ein UNIX Timestamp ist.
Mach mal im phpmyadmin:
Code:
Select buchungszeit from fuco_buchungen_konto order by uid desc Limit 10
und poste die Ausgabe.
 
es ist zwar offensichtlich die falsche Tabelle aber ich nehme an, das Zeit dann auch int sein wird, also ein unix_timestamp.

Code:
delete fom Konto where zeit < unix_timestamp('2006-04-30')

edit mach lieber zuerst das was DocTrax vorgeschlagen hat.

MfG respawner
 
SQL-Befehl: Select buchungszeit from fuco_buchungen_konto order by uid desc Limit 10;
Zeilen: 10

buchungszeit
1148503807
1148470108
1148513349
1148503807
1148452628
1148503807
1148496575
1148496555
1148496539
1148496499
 
OK, ist ein UNIX-Timestamp.

dann passt das SQL von respawner:
delete from fuco_buchungen_konto where buchungszeit < unix_timestamp('2006-04-30')

mit Datum im ISO 8601 Format.
https://de.wikipedia.org/wiki/ISO_8601

Auf int(10) passt nämlich auch das 200604300000 !
 
Zuletzt bearbeitet:
thx hat geklappt hat mir aber dieses dann bei der Abfrage < unix_timestamp in rot angezeigt. Naja egal paßt aber so;)
 
Murdoch schrieb:
hat mir aber dieses dann bei der Abfrage < unix_timestamp in rot angezeigt. Naja egal paßt aber so;)
Je nach phpMyAdmin-Theme werden Funktionen anders eingefärbt. Im default-Theme isses rot.