1: Jeg vil kraftigt anbefale at du ændre dine datoe til at tilføre datetime datatypen i stedet for varchar. Det er en fejl at gemme datoer som tekst, da du mister muligheden for at bruge datofunktionerne.
2: Der behøves ikke noget limit. Afhængig af hvordan din kode ser ud, skal der bare laves en select. Går ud fra du har et loop, så det bliver noget i denne stil:
set rs1 = conn.execute("select * from Tabel 1") while not rs1.eof set rs2 = conn.execute("select * from Tabel 2 where rchild="& rs1("topicID") &" order by id desc") if rs2.eof 'Ingen underposter response.write rs1("author") & rs("dato") else 'Udskriv sidste underpost response.write rs1("rauthor") & rs("rdato") end rs1.MoveNext wend
Det ser godt ud, fennec. Jeg vi lige prøve det af.
Nu rettede jeg RS("created") til datetime, og så stod der 00/00/0000 00:00:00 på alle brugerne. De data er mistet, er de ikke? Der er ikke sket den store katastrofe, jeg skal så bare lige lave en update og manuelt sætte nogle datoer og klokkeslet ind :)
Du skulle have lavet en ny kolonne ("createdNY"), også opdatere den med data fra "created". Derefter kunne du slette "created" og omdøbe "createdNY" kolonnen til "created". Så ved du hvordan man gør næstegang.
fennec, jeg vil gerne have, at man i oversigten kan se, når der er et nyt indlæg. Når man kigger i oversigten, skal alle de tråde med nye indlæg i, være med fed. Dvs. du er f.eks. inde og enten opretter et helt nyt indlæg, og samtidig sættes RS("unredad") = 1 (TINYINT(1)). Når man så har været inde på siden, skal RS("unredad") være = 0. Hvis jeg så svarer på dit oplæg, skal unread sættes til 1, så du kan se, at der er en besvarelse på dit indlæg osv.osv. Det skal selvfølgelig gælde for alle.
Jeg har selv lavet det engang for en 4-5 år siden, men man kan godt sige, at jeg lige nu har mistet overblikket :) Har du mod på at hjælpe mod ekstra point?
- Et debatoplæg kan være ulæst. I det tilfælde skal overskriften være med fed skrift - Et debatoplæg kan være læst. I det tilfælde skal overskriften være plain
- Når der er nye indlæg i oplægget, skal overskriften igen være fed - Når man har læst indlægget, skal overskriften igen være plain
Jeg har en liste med kategorier, og under hver af dem en liste med besvarelser. Hvis jeg har læst alle besvarelser, og der er kommet en ny efter jeg har logget af, skal emnet emnet i morgen på den tråd være fed. Håber du forstår? :)
Ja, jeg regnede også med, at det kræver en ny tabel.
PS: Hvis jeg opretter en ny tråd, skal emnet på den være fed for alle. Hvis der er en besvarelse på den tråd, skal emnet i oversigten være fed for alle, lige indtil de har læst den. For hvert oprettet tråd, skal emnet være fed. Hvis Person A ikke har læst den, skal emnet være med fed. Når Person A har læst den, skal emnet være med alm. tekst, men ikke for Person B, hvis han ikke har læst den. Er det for kryptisk? :)
Er siden opbygget på samme måde ala Experten, eller på en anden måde? Jeg spørger fordi det afgøre hvornår en subpost er læst. Hvis det er som E, vil den blive registreret som læst, så snart man kommer ind på hovedposten. Kunne også være opbygget, så man kun ser overskriften af subposterne, og skal klikke på dem for at lukke dem op.
Man logger sig ind. Herefter vælger man debatoversigten, som indtil nu hiver alle hovedkategorierne ud. Under hver enkelt hovedkategori er samtlige oprettede debattråde hevet ud. Når man trykker på én af dem, får man den oprettede debat og alle de underliggende svar. Så det er faktisk 3 tabeller, som relateres til hinanden:
DATABASE 1 (HOVEDKATEGORI): Unikt ID
DATABASE 2 (OPRETTEDE EMNER): Unikt ID child (er lig med unikt ID i database 1)
DATABASE 3 (BESVARELSER PÅ OPRETTEDE EMNER): Unikt ID rchild (er lig med unikt ID i database 2)
Min tanke var at lave en ekstra tabel, som automatisk laver en Conn.Execute sæt-0-i-RS("unread"), når man går ind i den enkelte tråd. Dvs. man burde have læst den, når man har været inde på siden. RS("unread") vil nu være 0 (nul).
Hvis jeg logger på i morgen, og der ikke er nogen, der har postet et nyt indlæg, vil værdien i RS("unread") stadig være 0, og class vil stadig være almindeligskrift. I det øjeblik en eller anden poster et nyt indlæg, skal RS("unread") tildeles værdien 1. Det var min tanke. Men jeg har haft en del problemer med at overskue hvordan det bedst laves individuelt på alle medlemmer. Jeg kan sagtens lave det i et slags mailsystem, hvor man skriver en besked til ét medlem. Men hvordan dulen det skal kringles, når ALLE medlemmer (der er ikke så mange, men sagen uvedkommende :)) skal kunne se, hvis der er et nyt debatoplæg/debatindlæg .... den er lidt kringlet, synes jeg :)
HOVEDKATEGORI I Oprettet debatoplæg nr. 1 Besvarelse nr. 1 på oprettet debatoplæg nr. 1 Besvarelse nr. 2 på oprettet debatoplæg nr. 1 Besvarelse nr. 3 på oprettet debatoplæg nr. 1 Besvarelse nr. 4 på oprettet debatoplæg nr. 1 Oprettet debatoplæg nr. 2 Besvarelse nr. 1 på oprettet debatoplæg nr. 2 Besvarelse nr. 2 på oprettet debatoplæg nr. 2 Besvarelse nr. 3 på oprettet debatoplæg nr. 2 Oprettet debatoplæg nr. 3 Besvarelse nr. 1 på oprettet debatoplæg nr. 3 Besvarelse nr. 2 på oprettet debatoplæg nr. 3 Besvarelse nr. 3 på oprettet debatoplæg nr. 3 Besvarelse nr. 4 på oprettet debatoplæg nr. 3 Besvarelse nr. 5 på oprettet debatoplæg nr. 3 Besvarelse nr. 6 på oprettet debatoplæg nr. 3
HOVEDKATEGORI II Oprettet debatoplæg nr. 1 Besvarelse nr. 1 på oprettet debatoplæg nr. 1 Besvarelse nr. 2 på oprettet debatoplæg nr. 1 Besvarelse nr. 3 på oprettet debatoplæg nr. 1 Besvarelse nr. 4 på oprettet debatoplæg nr. 1 Oprettet debatoplæg nr. 2 Besvarelse nr. 1 på oprettet debatoplæg nr. 2 Besvarelse nr. 2 på oprettet debatoplæg nr. 2 Besvarelse nr. 3 på oprettet debatoplæg nr. 2 Oprettet debatoplæg nr. 3 Besvarelse nr. 1 på oprettet debatoplæg nr. 3 Besvarelse nr. 2 på oprettet debatoplæg nr. 3 Besvarelse nr. 3 på oprettet debatoplæg nr. 3 Besvarelse nr. 4 på oprettet debatoplæg nr. 3 Besvarelse nr. 5 på oprettet debatoplæg nr. 3 Besvarelse nr. 6 på oprettet debatoplæg nr. 3
Det er kun de oprettede debatindlæg man kan se, og de er samtidig links, så man kan se hvad det drejer sig om. I oversigten kan man kun se:
HOVEDKATEGORI I Oprettet debatoplæg nr. 1 Oprettet debatoplæg nr. 2 Oprettet debatoplæg nr. 3 Oprettet debatoplæg nr. 4 Oprettet debatoplæg nr. 5
HOVEDKATEGORI II Oprettet debatoplæg nr. 1 Oprettet debatoplæg nr. 2 Oprettet debatoplæg nr. 3
HOVEDKATEGORI III Oprettet debatoplæg nr. 1 Oprettet debatoplæg nr. 2 Oprettet debatoplæg nr. 3 Oprettet debatoplæg nr. 4 Oprettet debatoplæg nr. 5 Oprettet debatoplæg nr. 6 Oprettet debatoplæg nr. 7
HOVEDKATEGORI IV Oprettet debatoplæg nr. 1 Oprettet debatoplæg nr. 2
Det er kun en midlertidig løsning, men hvis der er oprettet et nyt debatoplæg, skal skriften være fed. Hvis der er kommet en besvarelse til et debatoplæg, skal overskriften også være fed, så man kan se, at der enten er et nyt debatoplæg, eller en besvarelse i en eksisterende tråd.
Det skal laves om hen ad vejen, men det er ligegyldigt lige nu. Lige nu er det funktionen, der skal på plads :)
Så det er en opbygning som E. Det gjorde det lidt nemmere :o)
Du skal have oprette en ny tabel: [UserHaveSeenIt] HaveSeenID, autonummer userID (ref til bruger tabel) emneID (ref til emne tabel)
Prinsippet bag dette er at indsætte en række i UserHaveSeenIt når brugeren gå ind på et emne. Når der oprettes en ny besvarelse i et emne, slettes alle tilhørende rækker i UserHaveSeenIt.
Hvis der er en række har brugeren læst emnet og besvarelserne Er der ikke en række har brugeren ikke læst emnet og besvarelserne
Når du skal vise emneteksten, slår du bare op i UserHaveSeenIt og ser om der er et hit eller ej.
Jeg kan godt følge dig et godt stykke hen ad vejen, men det, der gør mig lidt usikker på hvad du helt præcist mener er, hvad der skal indsættes. Du nævner "en række". Mener du med det parametrene på debattråden, som f.eks. topcatID=XXX&subcatID=YYY? Hvis der er 41 nyoprettede tråde og besvarelser siden mit sidste login, butde jeg gerne kunne se 41 emner, hvor teksten er fed.
Du skal bare oprette den ene tabel, som jeg har vist dig. Alt det med RS("unread") skal ikke bruges til noget.
Forklaring på hvordan det fungere:
Du er gået ind på siden, og ind under en af hovedkategorierne. Dem viser du sikkert via et loop. Der tilføjer du et tjeck:
set rs = conn.execute("select * from emne where hovedID="& hovedID) while not rs.eof set rs2 = conn.execute("select * from UserHaveSeenIt where userID="& userID &" and emneId="& rs("id")) if rs2.eof then 'Har ikke læst posten else 'Har læst posten end if rs.MoveNext wend
Når man så går ind på et emne, er det aller første du gør på siden at indsætte en række UserHaveSeenIt hvis der ikke er en i forvejen: set rs = conn.execute("select * from UserHaveSeenIt where userID="& userID &" and emneId="& rs("id")) if rs.eof then conn.execute("insert into UserHaveSeenIt(userID,emneID) values("& userID &","& emneID &")") end if
ps. Jeg er på i arbejdstid, hvilket vil sige 8-16:30
Det giver jo ingen mening den kode. Prøv lige at læse den en ekstra gang :o)
Set RSz = Conn.Execute("SELECT ...ztopicID =" & RSz("ztitleID"))
Du er ved at åben RSz recordset, men samtidig vil du hente "ztitleID" værdien fra det recordset du er ved at åbne...
Jeg er rigmelig sikker på at RSz("ztitleID") skal være en request.querystring/variabel i stedet, eller du skal have åbnet et RSz recordset tidligere i koden.
<snip> Når man så går ind på et emne, er det aller første du gør på siden at indsætte en række UserHaveSeenIt hvis der ikke er en i forvejen: set rs = conn.execute("select * from UserHaveSeenIt where userID="& userID &" and emneId="& rs("id")) if rs.eof then conn.execute("insert into UserHaveSeenIt(userID,emneID) values("& userID &","& emneID &")") end if </snip>
Det er aldrig godt at lave fremmednøgler på tekster. Du har sikkert en bruger tabel, og i den burde du gemme et ID, et brugernavn og et password. I stedet for at lave fremmednøgler på navnet så brug ID'et i stedet.
Men for nu at bruge din kode, hvor det er tekst:
Set RSz = Conn.Execute("SELECT * FROM itgsecrethaveseen WHERE zuser ='" & sessionusername & "' AND ztopicID =" & ztopicID )
Så skal du have ændret alle dine referencer i databasen som peger på username til at pege på ID'et i stedet. Dvs at datatypen også skal ændres fra tekst til tal.
Brugernavnet må altså kun stå i din user tabel, alle nadre tabeller skal der stå et tal som henviser til ID'et på den bruger.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.