Denna koden raderar alla poster som den ska där [Besvarat] är 2, men inte där [Besvarat] är 3?
SQLin = "DELETE FROM Meddelanden WHERE Besvarat = 2 OR Besvarat = 3 IN (SELECT Senast FROM Medlemmar WHERE [Senast] = NULL )"
14 svar · 356 visningar · startad av Inferis
Denna koden raderar alla poster som den ska där [Besvarat] är 2, men inte där [Besvarat] är 3?
SQLin = "DELETE FROM Meddelanden WHERE Besvarat = 2 OR Besvarat = 3 IN (SELECT Senast FROM Medlemmar WHERE [Senast] = NULL )"
Detta ska inte ligga i detta forumet va? Men jag hittade liknande saker när jag sökte just i Asp/Vbscript.
Men jag hittade liknande saker när jag sökte just i Asp/Vbscript.
Jepp. Vi kan inte alltid hålla koll på alla trådar. Dessutom är många av dem gränsfall mellan ASP och SQL.
Jag flyttar iallafall denna tråd från ASP, VBScript till SQL, eftersom det är en SQL-fråga, snarare än ett script-problem.
Jag förstår inte att någon DBMS godkänner den frågan över huvud taget. (Mysql förmodar jag.)
Den här delen förstår jag
DELETE FROM Meddelanden
WHERE Besvarat = 2 OR Besvarat = 3
Vad menar du med
IN (SELECT Senast FROM Medlemmar WHERE [Senast] = NULL )
?
Jag försöker få den att radera alla poster i Meddelanden där fältet Senast är tomt i tabellen Medlemmar.
Först görs en koll om medlemmen inte loggat ut utan bara stängt fönstret, om så är fallet så sätts senast till Null.
Men samtidigt ska dennes meddelanden raderas automatiskt.
(Om Besvarat är 1,4 eller 5 ska det INTE raderas, bara 2 eller 3)
Hur kopplar du ihop meddelandet med en viss användare då?
Det var ju det jag försökte göra med IN.
Det kan ju vara flera användare som inte loggat ut, utan bara stängt fönstret.
Jo förvisso. Det jag avser är att du i tabellen meddelanden måste ha någon kolumn som anger vem som "äger" meddelandet eller?
Alla inloggade medlemmar som laddar en sida uppdaterar fältet Senast i tabellen Medlemmar med now().
Om Senast är 20 minuter gammalt så sätts det till NULL av en annan medlem som laddar en sida. Då anses den medlemmen vara automatiskt utloggad.
Jag vill att alla meddelanden som är flaggade som 2 eller 3 ska raderas där medlemmarna har blivit automatiskt urloggade.
Ungefär som
delete from meddelanden Where Meddelanden.Besvarat =2 OR Meddelanden.Besvarat= 3 AND Medlemmar.Senast = NULL"
delete from meddelanden
Where Besvarat in (2,3)
and medlemsid in (select medlemsid
from medlemmar
where senast is null)
Nu har jag gissat på några kolumnnamn.
Tack LarsG, men Id på medlemmar finns inte.
Jag vill rensa upp efter alla som inte loggat ut.
Hela koden:
' Ta bort alla som inte gjort något på 20 min - utloggade
SQL = "UPDATE Medlemmar set [senast] = NULL, Loggade_in =#" & now() & "# where Senast < dateadd('n',-20,now())"
connection.execute(SQL)
' Radera meddelanden automatiskt 1=oläst, 2-3 raderas, 4=sparas
SQL2 = "DELETE FROM Meddelanden WHERE Lastes < dateadd('n',-20,now()) AND Besvarat in (2,3) IN (SELECT Senast FROM Medlemmar WHERE [Senast] = NULL )"
connection.execute(SQL2)
Du vill alltså bara utföra detta om det finns en rad där senast är null?
SQL2 = "DELETE FROM Meddelanden WHERE Lastes < dateadd('n',-20,now()) AND Besvarat in (2,3) and exists (SELECT * FROM Medlemmar WHERE Senast is NULL )"
Ett villkor som
where kolumn = null
är aldrig sant. (Det är inte godkänt enligt standard att skriva så.)
Jag förstår inte varför du vill ha exists-villkoret med, men det är väl inget som angår mig.
När medlemmarna har öppnat ett meddelande så markeras det som läst.
Om dessa inte väljer att spara det så raderas det automatiskt när dem loggar ut. Det funkar jättebra. Men jag vill ju radera dem breven automatiskt om de inte klickar på logga ut.
Gjorde så att meddelanden raderas efter en timme om dem inte är flaggade som sparas.
SQLin2 = "DELETE FROM Meddelanden WHERE Lastes < dateadd('n',-60,now()) AND Besvarat in (2,3) "