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å suddas ut de mess efter den tionde messet.
Hur ska man formulera SQL satsen i det här fallet?
Att köra med DELETE FROM tabell WHERE id > 10 AND WHERE Anvandare = " & Session("anv") - funkar ju självklart inte med tanke på att det kan finnas tusentals poster (id).
Kan nån hjälpa mig på traven och hur bör man tänkta i det här fallet?
Vill du behålla de tio senaste meddelandena från den personen? Då kanske du kan göra så här:
delete
from tabell t
where t.anvandare
= '" & session("anv") & "'
and t.id
not in ( select t2.id
from tabell t2
where t2.anvandare
= '" & session("anv") & "'
order
by <datum> desc
limit 10)
Tack för svaret. Jag ska labborera nu och se ifall detta går. Kan säga redan nu att jag får syntax fel near where t.anvanadre. Jag ska se vad som är problem.
Jag har testat nu ett antal gånger utan att lyckas.. :x
Såhär ser tabellen "skickat" ut:
id
tillAnvandare
anvandare
amne
mess
datum
delete from skickat t where t.anvandare = 2 and t.id not in (select t2.id from skickat t2 where t2.anvandare = 2 order by date desc limit 10);
Såhär ser felmeddelandet ut:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for th
e right syntax to use near 'where t.anvandare = 2 and t.id not in (select t2.id from skickat t2 where' at line 1
Jag använder version 4.1.10b och så vitt jag vet borde det inte föreställa några problem med den versionen.
A subquery can contain any of the keywords or clauses that an ordinary SELECT can contain: DISTINCT, GROUP BY, ORDER BY, LIMIT, joins, index hints, UNION constructs, comments, functions, and so on.
Läser man vidare i länken jag citerade ovan kan man se följande:
One restriction is that a subquery's outer statement must be one of: SELECT, INSERT, UPDATE, DELETE, SET, or DO. Another restriction is that currently you cannot modify a table and select from the same table in a subquery. This applies to statements such as DELETE, INSERT, REPLACE, and UPDATE.
Alltså går det att ha LIMIT i subselects ända från version 4.1 (om det inte är någon bugg som ställer till det). Men det går inte att hämta information från samma tabell som modifieras, som jag gjort.
Så det innebär att 10 000 medlemmar t.ex. kommer att skapa temp tabeller när de kollar sin outbox. Det skulle försämra prestandan på servern avsevärt så det skippar jag nog. Jag måste nog använda hjärnan lite mer eller kanske hårdkoda i asp på nåt vis.
141 ms totalt · 3 externa anrop · v20260731065814-full.b746b907