webForumDet fria alternativet

Raderar inte allt

14 svar · 356 visningar · startad av Inferis

InferisMedlem sedan sep. 2000670 inlägg
#1

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 )"
InferisMedlem sedan sep. 2000670 inlägg
#2

Detta ska inte ligga i detta forumet va? Men jag hittade liknande saker när jag sökte just i Asp/Vbscript.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#3

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.

LarsGMedlem sedan dec. 200012 464 inlägg
#4

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 )

?

InferisMedlem sedan sep. 2000670 inlägg
#5

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)

LarsGMedlem sedan dec. 200012 464 inlägg
#6

Hur kopplar du ihop meddelandet med en viss användare då?

InferisMedlem sedan sep. 2000670 inlägg
#7

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.

LarsGMedlem sedan dec. 200012 464 inlägg
#8

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?

InferisMedlem sedan sep. 2000670 inlägg
#9

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"
LarsGMedlem sedan dec. 200012 464 inlägg
#10
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.

InferisMedlem sedan sep. 2000670 inlägg
#11

Tack LarsG, men Id på medlemmar finns inte.
Jag vill rensa upp efter alla som inte loggat ut.

InferisMedlem sedan sep. 2000670 inlägg
#12

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)
LarsGMedlem sedan dec. 200012 464 inlägg
#13

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.

InferisMedlem sedan sep. 2000670 inlägg
#14

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.

InferisMedlem sedan sep. 2000670 inlägg
#15

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) "
138 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)