webForumDet fria alternativet

Radera alla poster men lämna kvar 10

Databaser & SQL

25 svar · 1 462 visningar · startad av Steam · sida 2 av 2

Frågan, av Steam

Tjena Det är så att jag håller på och skapar ett meddelande system med möjlighet för skickade meddelanden så att användaren kan tydligt se vilka mess denne har skickat. Vad jag vill är att en enskild person inte kan lagra hur många mess som helst utan begränsa antalet till max 10 skickade mess så att det senaste suddas ut så fort den elfte har skickats eller när användaren besöker sin outbox så

Läs frågan i sin helhet →
Medlem sedan juli 2003169 inlägg
#21

Aaaaah nu har jag lyckats. :bire
Jag postar koden här ifall det hjälper någon som har haft samma problem som jag.

Set Rec=Conn.Execute("SELECT id FROM sent WHERE anvandare=" & Session("anv") & " ORDER BY ID DESC LIMIT 0,10)

If Not Rec.EOF Then
Do Until Rec.EOF
      Radera = Radera & Rec("id") & ","  
RS.MoveNext
Loop

Radera = Left(Radera, Len(Radera) - 1)  
    Conn.Execute("DELETE FROM sent WHERE anvandare=" & Session("anv") & " AND id NOT IN (" & Radera & ")")
End If
Set Rec = Nothing
Medlem sedan feb. 20034 441 inlägg
#22

Finns det någon bra lösning på det här nu?
Jag tar emot ~200 poster var 10'e minut och vill ta bort alla utom 10 sorterat på ett datum i stigande ordning.

Vill alltså bara ha kvar de 10 posterna som ligger närmast i tiden.

DBMS är MySql.

Tack!

Medlem sedan dec. 20025 483 inlägg
#23
delete
   from tbl
  where id
 not in ( select id
            from tbl
          order
              by t desc
           limit 10 )

...om nu MySQL kommit så långt att de stödjer LIMIT i subqueries. Annars kanske du får hämta ut en 10-lista med id:n på de du vill behålla och göra:

delete from tbl where id not in (' + MyCommaSeparatedListOfIDsToKeep + ')
Medlem sedan feb. 20034 441 inlägg
#24

Aha, bra, ska testa.
Försökte mig på det här:

$query = "DELETE FROM network_tournaments "
		."ORDER BY StartDate DESC "
		."LIMIT 50," . ($limit - 50);

...där $limit är det antal poster som lades till strax innan, men det funkar inte alls.
Verkar inte gå att använda Limit tillsammans med Offset i en DELETE fråga.

Nu när jag testar sättet ovan får jag "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'".

/red Aha, nu såg jag att du skrev "om nu..." och nej, det stöder dom inte...
Får köra det andra sättet med kommaseparerat då...

Medlem sedan feb. 20034 441 inlägg
#25

Peter S skrev:

delete from tbl where id not in (' + MyCommaSeparatedListOfIDsToKeep + ')

Fick bli den där lösningen... inte så snyggt men det funkar.

Medlem sedan feb. 20034 441 inlägg
#26

Nu har jag en liten fråga angående samma sak. Har ett system där texter sparas. texterna finns på x antal språk i y olika versioner.

Nu ska jag köra en fråga som en gång per dygn hämtar alla versioner utom den senaste på varje språk och sätter en "flagga" till 2 istället för defaultvärdet 1.

Har testat massa hit och dit med GROUP BY, men kom på att jag inte kan använda det, eftersom parent _kan_ vara samma för fler versioner och språk _kan_ vara samma.

Vore tacksam för lite hjälp med det här. DBMS är MySQL.

Tack!

/edit, kan vara bra att veta om några fältnamn:

cont_id (int, räknare)
cont_parentid (int, parent)
cont_language (int, språk)
cont_text (text)
cont_updated (int, UNIX_TIMESTAMP())
251 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)