Mailinglisten-Archive |
Hallo
Ich möchte eine Tabelle rein mit MySQL Boardmittel "elegant" aufräumen.
Gegeben: MySQL 4.0.24 (ein Update auf eine höhere Version ist derzeit nicht
möglich, daher keine Subselects)
Beispiel-Tabelle:
id id_content content user time del
1 leer Content 1 0 1038953700 0
2 test Content 2 3 1038953815 0
3 test Content 3 6 1038953712 0
5 test Content 4 16 1038953714 0
7 leer Content 5 1 1038953814 0
Frage:
Wie kann ich alle Zeilen löschen so das 'id_content' mit dem höchsten 'time'
jeweils nur einmal vorhanden ist.
Aus dem Beispiel müssten also diese zwei Zeilen übrig bleiben:
id id_content content user time del
2 test Content 2 3 1038953815 0
7 leer Content 5 1 1038953814 0
Mein derzeitiger Weg führt über eine zweite (temporäre) Tabelle in die ich
alle 'time'-Werte schreibe gruppiert nach 'id_content' ("testtime" enthält
nur die Spalte 'time2'):
INSERT INTO testtime (`time2`)
SELECT MAX( `time` )
FROM `testcontent`
GROUP BY `id_content`
Danach noch folgende Querys:
UPDATE `testcontent`, `testtime`
SET `testcontent`.`del` = 1
WHERE `testcontent`.`time` = `testtime`.`time2`;
DELETE `testcontent` FROM `testcontent`
WHERE `testcontent`.`del` = 0;
UPDATE `testcontent`
SET `testcontent`.`del` = 0;
Aber das muss doch auch einfacher gehn, oder?
--
Sven
php::bar PHP Wiki - Listenarchive