Relation: Ret værdi, når brugerne kommer ind på siden (ASP/MySQL)
Dim RSCheckDuration2Set RSCheckDuration2 = Conn.Execute("SELECT * FROM lbr_messages WHERE duration = 2")
If Not RSCheckDuration2.EOF Then
Do Until RSCheckDuration2.EOF
Dim RSCheckDurationRead
Set RSCheckDurationRead = Conn.Execute("SELECT * FROM lbr_messages_read WHERE newID = " & RSCheckDuration2("messageID") & " And NotRead = 0 And duration = 1")
'Conn.Execute "UPDATE lbr_messages SET duration = 1 WHERE messageID = " & RSCheckDurationRead("newID") & ""
If RSCheckDurationRead("NotRead") <> 1 Then
Conn.Execute "UPDATE lbr_messages SET duration = 1 WHERE messageID = " & RSCheckDurationRead("newID") & ""
End If
RSCheckDuration2.MoveNext
Loop
End If
Jeg ved ikke lige hvordan jeg skulle formulere spørgsmålet i titlen. Men jeg har 2 tabeller: messages og messages_read
Den ene bruges til beskeder: Bruger opretter en besked med en tilhørende titel. Den indeholder følgende, som er relevante for dette spørgsmål:
1. messageID
2. duration
Med nummer "2. duration" menes der, at man ved oprettelse kan vælge:
1. Skal slettes ved midnat (flygtig information, som kun er relevant for den indeværende dag, værdi = 1)
2. Skal først slettes, når alle brugere har læst beskeden (værdi = 2. Brugerne kan være syge, på ferie, på kursus osv. Så skal beskeden ikke fjernes før de alle er kommet tilbage og har læst den)
Så hvis brugeren markerer i "Slettes ved midnat", er det ikke noget problem. Jeg har lavet et script, som sletter alle recordsets med messageID nummer X, både fra messages og messages_read. Det er efterprøvet, og virker perfekt.
Da det er til beskeder for alle brugerne, kopierer jeg alle brugerne fra "users" over i messages_read hver gang der er en bruger, som opretter en besked.. Her tager jeg messageID fra messages og lægger over i newID ud for hver bruger i messages_read. Virker fint. Ligeledes kommer duration med. messages_read indeholder disse relevante recordsets
1. newID (= messageID fra messages)
2. readers (= alle brugerne fra "users")
3. NotRead (standardværdi = 1. Når bruger går ind på siden, ændres 1 til 0; brugeren har været inde på siden)
3. newID (= messageID fra messages)
Forfatteren opretter beskeden, og den får tildelt et ID i messageID (messages)
Alle brugere kopieres fra "users" over i messages_read, sammen med duration fra messages til messages_read, og messageID fra messages til newID ud for hver enkelt user i messages_read.
Når den første bruger går ind på siden, vil NotRead for denne bruger ændres fra 1 til 0. Resten af brugerne vil stadig have værdien 1 i NotRead, siden de endnu ikke har været inde endnu.
Så er problemet: Når samtlige brugere har været inde og læse beskederne, står der 0 i NotRead ud for alle brugerne. Når der gør det, skal duration i messages ændres fra 2 til 1. Så kan det slettes ved næste datoskifte. Og det skal kunne rettes i toppen besked-siden. Dvs der skal laves et tjek i toppen af siden, hvor:
1. NotRead bliver ændret fra 1 til 0 på den pågældende bruger i messages_read
2. Hvis der står 0 i NotRead ud for samtlige brugere i messages_read, skal duration ændres fra 2 til 1. Så har alle læst beskeden, og så kan den slettes fra messages, og tilhørende data slettes fra messages_read ved næste datoskifte. Og det er mit problem. Jeg kan ikke få det til at virke, jeg kan ikke ændre duration i messages fra 2 til 1 på den pågældende messageID i messages, når der står 0 i NotRead på alle brugere i messages_read. Et eksempel på tabellerne kunne se sådan her ud:
MESSAGES:
messagesID = 1
duration = 2 'Siden NotRead = 0 på dette ID i messages_read, skal duration ændres fra 2 til 1
messagesID = 2
duration = 2 'Bruger B har endnu ikke læst denne besked. Ergo skal duration fortsat hedde 2
MESSAGES_READ
BugerA:
newID = 1
NotRead = 0
Buger B:
newID = 1
NotRead = 0
BugerA:
newID = 2
NotRead = 0
Buger B:
newID = 2
NotRead = 1
Nu har jeg rodet meget rundt i det her for at få det til at virke, så tilgiv mig, at koden måske ikke ser logisk ud:
'RET NotRead til 0 PÅ BrugerX (virker fint)
'-------------------------------------------------------------------------------------------------------------------------------------------------------
Dim RSMessage
Set RSMessage = Conn.Execute("SELECT * FROM messages ORDER BY messageID DESC")
Conn.Execute "UPDATE messages_read SET NotRead = 0, duration = 1 WHERE readers = '" & SQLEncode(Session("username")) & "'"
'-------------------------------------------------------------------------------------------------------------------------------------------------------
'HVIS NotRead = 0 HOS ALLE BRUGERE I messages_read PÅ DET SAMME newID i messages_read, RET duration TIL 1 I messages
'-------------------------------------------------------------------------------------------------------------------------------------------------------
Dim RSCheckDuration2
Set RSCheckDuration2 = Conn.Execute("SELECT * FROM messages WHERE duration = 2")
If Not RSCheckDuration2.EOF Then
Do Until RSCheckDuration2.EOF
Dim RSCheckDurationRead
Set RSCheckDurationRead = Conn.Execute("SELECT * FROM messages_read WHERE newID = " & RSCheckDuration2("messageID") & " And NotRead = 0 And duration = 1")
Conn.Execute "UPDATE messages SET duration = 1 WHERE messageID = " & RSCheckDurationRead("newID") & ""
RSCheckDuration2.MoveNext
Loop
End If
'-------------------------------------------------------------------------------------------------------------------------------------------------------