I have a table that contains
id username password last_touch
It is possible to have duplicate entries for the same id. The last_touch is the timestamp of the last insert command. How can I delete all entries with the same id, apart from the last one that is left so I always have the user details which are most up to date?
Somewhere along the lines of:
DELETE FROM user_data
WHERE id=1
LIMIT (count(SELECT 1
FROM user_data
WHERE id=1) - 1)
(Obviously the syntax is not correct in the above example, so MySQL complains.)
Use a nested query to select the latest timestamp for the given user id, and delete all rows for that id with timestamps different than that one:
Update: Fixed direct reference to table being modified in inner
SELECTby wrapping anotherSELECTaround it, as per Frank’s comments.