webForumDet fria alternativet

Radera alla utom 100 senaste

Databaser & SQL

8 svar · 454 visningar · startad av M@rtin

Medlem sedan dec. 19992 085 inlägg
Frågan#1

Jag har en logg-tabell i en mysql databas och jag skulle vilja kunna ta bort allt utom de senaste 100 tuplerna i den (högst id = senast).

Går detta att göra på något snyggt sätt?
Man kan ju alltid lägga in 100 saker och sedan göra så att varje gång man lägger till något tas det bort en med det känns inte riktigt bra.

Medlem sedan maj 200010 687 inlägg
#2
DELETE FROM Foo
WHERE Id NOT IN (
	SELECT TOP 100 Id FROM Foo ORDER BY Id DESC
)
Medlem sedan dec. 19992 085 inlägg
#3

finns verkligen TOP i mysql?

Medlem sedan dec. 19995 874 inlägg
#4
DELETE FROM Foo
WHERE Id NOT IN (
	SELECT Id FROM Foo ORDER BY Id DESC LIMIT 0, 100
)
Medlem sedan dec. 19992 085 inlägg
#5

Man kan inte köra LIMIT i subquerys, inte i min mysql version iaf. :(

Medlem sedan mars 20032 667 inlägg
#6

Vilken version använder du?

Medlem sedan dec. 19992 085 inlägg
#7

5.0 fast mitt webhotell kör 4.1 tror jag och det är främst det som har betydelse. Det funkar inte i 5.0 iaf så det funkar nog inte i 4.1 heller.

Medlem sedan mars 20032 667 inlägg
#8

Nä, det fungerar inte i 4.1 och framåt om jag har rätt för mig.

Se denna tråd:
http://www.webforum.nu/showthread.php?t=138149

och framför allt detta svar:
http://www.webforum.nu/showthread.php?p=1148073#post1148073

Medlem sedan dec. 19992 085 inlägg
#9

Ja okej, kanske är enda möjligheten.

Det går inte att typ räkna antalet tupler och radera med en LIMIT antal-100 eller nåt i den stilen?

257 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)