webForumDet fria alternativet

Raderar inte allt

Databaser & SQL

14 svar · 357 visningar · startad av Inferis

Medlem sedan sep. 2000667 inlägg
Frågan#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 )"
Medlem sedan sep. 2000667 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.

Medlem 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.

Medlem 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 )

?

Medlem sedan sep. 2000667 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)

Medlem sedan dec. 200012 464 inlägg
#6

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

Medlem sedan sep. 2000667 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.

Medlem 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?

Medlem sedan sep. 2000667 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"
Medlem 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.

Medlem sedan sep. 2000667 inlägg
#11

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

Medlem sedan sep. 2000667 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)
Medlem 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.

Medlem sedan sep. 2000667 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.

Medlem sedan sep. 2000667 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) "
266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)