Varför funkar ej detta? Det ska kolla att om det finns fler än 20 klotterinlägg så ska det gamlaste raderas
KlotterPS = 20
Conn.Execute("Delete From klotter Where id Not In (Select id From klotter Order By id desc limit " & KlotterPS & ")")
7 svar · 214 visningar · startad av Asa
Varför funkar ej detta? Det ska kolla att om det finns fler än 20 klotterinlägg så ska det gamlaste raderas
KlotterPS = 20
Conn.Execute("Delete From klotter Where id Not In (Select id From klotter Order By id desc limit " & KlotterPS & ")")
MySQL stödjer bara subselects från och med version 4.1, så kör du på en äldre version är det därför.
Det är dock inte helt omöjligt att en fråga likt denna fungerar (obs: jag tar inget ansvar om den raderar fel poster ;) )
Conn.Execute("Delete From klotter Order By id desc limit " & KlotterPS)
Mvh
Det går väl ej. Då raderar den väl fel?! Din kod gör väl att de 20 nyaste raderas?! Den ska radera alla andra utom de 2 nyaste!
Såklart. Jag är lite för snabb på tangenterna. :)
Du kan bortse från mitt andra inlägg, jag tittar in senare.
Mvh
Okej, det vore snällt av dig!
Jag tror att det är just det där "alla utom de två nyaste" som skapar problemet iom ostödet för delfrågor. Om du använder webhotell har du kanske inte möjlighet att påverka, men är det egen server så kanske du skulle prova att uppgradera?
Jag är rädd att du måste göra detta med två SQL-frågor. 1) En select, och du lägger ihop ID-n alla utom de två nyaste, till en kommaseparerad sträng, och 2) en deletefråga där du slänger in alla idn i IN().
Se om du blir klokare av att läsa här.
Mvh
Så här blev det:
Set RS=Conn.Execute("SELECT ID FROM Klotter ORDER BY ID DESC LIMIT 0,20")
'## -- loopa igenom resultatet --
Do Until RS.EOF
strDelete = strDelete & RS("id") & ","
RS.MoveNext
Loop
strDelete = Left(strDelete, Len(strDelete) - 1)
Conn.Execute("Delete From klotter Where id Not In(" & strDelete & ")")