steen_hansen Seniormester
23. august 2018 - 19:01 Der er 1 kommentar og
1 løsning

Relation: Ret værdi, når brugerne kommer ind på siden (ASP/MySQL)

Dim RSCheckDuration2
    Set 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
'-------------------------------------------------------------------------------------------------------------------------------------------------------
steen_hansen Seniormester
23. august 2018 - 19:21 #1
Se venligst bort fra scriptet øverst på siden. Det skulle ikke have været med.
steen_hansen Seniormester
15. september 2018 - 09:39 #2
Lukker
Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links

Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester





Computerworld
Bitcoinen nåede lige at kulminere igen – men så kom krakket
Der blev sat en ny rekord for bitcoinens værdi i år – men godt 24 timer efter blev der høvlet næsten 20.000 kroner af den.
CIO
Podcast: Her er seks gode råd om ledelse og digitalisering fra danske top-CIO'er
The Digital Edge: Vi har talt med 17 af Danmarks dygtigste digitale ledere - og samlet deres seks bedste råd om digitalisering og ledelse. Få alle rådene på 26 minutter i denne episode af podcasten The Digital Edge.
Job & Karriere
Se Waoos forklaring: Derfor har selskabet fyret topchef Jørgen Stensgaard med omgående virkning
Waaos bestyrelse opsiger fiberselskabets topchef, Jørgen Stensgaard, der fratræder med omgående virkning. Se hele forklaringen fra Waao her.
White paper
Optimér netværket til håndtering af hybrid- og multicloud infrastruktur
I januar 2020 konstaterede Gartner, at cloudcomputing var blevet ”The New Normal” – og op gennem året gjorde Covid-19 det endda helt essentielt at være i stand til at drifte infrastrukturen helt eller delvist fra skyen. Situationen har tvunget virksomheder til hastigt at omstille eller gentænke deres driftsstrategi, og hybride infrastrukturmodeller er nu mere udbredte end nogensinde før. Men mange har også været nødt til at erkende, at den stigende kompleksitet – i særdeleshed på det netværks- og sikkerhedsbaserede felt – stiller helt nye krav til de organisationer, der anvender dem. Denne hvidbog går i dybden med nogle af de mest udbredte udfordringer, som disse transformationsscenarier stiller din organisation overfor. Den giver et solidt bud på, hvordan en netværkshub baseret på Interxion-teknologi gør det muligt at gentænke og optimere netværksinfrastrukturen. Særligt med henblik på at optimere den til at kunne håndtere en hybrid- eller multicloudbaseret infrastruktur.