Håller på att göra ett forum, men har stött på lite problem. Forumet skrivs i ASP med en Access-databas, men det spelar egentligen ingen roll. Det är mest det praktiska tänkandet jag är ute efter.
Jag har min databas uppbyggd såhär (dom viktiga iaf):
ID (unikt)
RefThread (vilken tråd som inlägget hör till)
Date (datum då inlägget skapades)
Time (klockslag då inlägget skapades)
First (av/på beroende om det är det första inlägget i en tråd)
Update
Update har egentligen bara betydelse när First = True (alltså, inlägget ligger först i tråden). När man skapar ett inlägg så uppdateras fältet Update (för det inlägg som är först i tråden) med det datum & klockslag som är just nu.
Sedan när jag skall visa alla inlägg så visas alla inlägg där First = True och sedan sorteras efter Update.
Detta fungerar felfritt ända tills någon tar bort det sista inlägget i en tråd. Datum & Klockslag är ju fortfarande kvar i fältet Update vilket gör att tråden ligger kvar högst upp (= lätt att bumpa utan att det märks egentligen).
Även om man tar bort det som står i Update när man tar bort det sista inlägget så blir det ju helt tomt där (vilket gör att tråden hamnar längst bak). Man kan väl inte på något sätt få tillbaka det som stod före?
Hur skall jag lösa detta på ett smart sätt?
Är det kanske enklare om man gör om databasen helt, men en egen tabell för "första-trådar" och en annan tabell för vanliga inlägg?
Så kan det ju gå om du loopar igenom alla svar i tråden
' Du måste skaffa update värdet på den som tas bort vi säger att
' intDelUpdate innehåller det talet
' Kan man ha update som fält ?
strSql = "Select * From [tabellnamn] where refthread = "+intReftrhead+" and update > "+intDelUpdate+""
Set Rs = Conn.Execute(strSql)
Do until Rs.Eof
strSql = "Update [tabellnamn] set update = update-1 where Id = "+Rs("id")+""
Set RsUpdate = Conn.Execute(strSql)
Set RsUpdate = Nothing
Rs.MoveNext
Loop
Obs koden är otestat. Efter det jag läst så tror jag att det kan vara såhär kanske något liknande.
Är det kanske enklare om man gör om databasen helt, men en egen tabell för "första-trådar" och en annan tabell för vanliga inlägg?
Nej, din metod är ej så smart. Det bästa hade varit 2 tabeller.
Threads
thread_id
thread_subject
thread_message
thread_date
thread_user ' Kan vara ett Id eller namn välj själv
thread_modifieddate
Replys
reply_id
reply_thread_id ' För att koppla den till huvudtråden
reply_subject
reply_message
reply_date ' Måste finnas för att sortera dom i ordning efter tråden
reply_user
reply_modifieddate
Sedan kan du säkert lägga till och ta bort rader här.
Jag tycker att man kan ha både trådar och svar i samma tabell, då det egentligen inte är någon skillnad på dem, iallafall inte några som inte går att separera med ett par snygga if-satser.
Då slipper du dessutom köra en JOIN mellan Threads och Replys, vilket innebär en prestandaförbättring du borde känna av, med tanke på att du troligtvis kör fler JOINs mot t.ex. tabellen Users (eller vad den heter).
Detta fungerar felfritt ända tills någon tar bort det sista inlägget i en tråd. Datum & Klockslag är ju fortfarande kvar i fältet Update vilket gör att tråden ligger kvar högst upp (= lätt att bumpa utan att det märks egentligen).
Är det inte önskvärt att låta det vara så då? Jag menar, en radering av ett inlägg är ju en ändring i tråden likaväl som ett nytt inlägg är, eller hur?
Jag bestämde mig för att ha kvar samma struktur på databasen som jag hade från början, alltså med alla trådar (startinlägg + svar) i samma tabell.
Den SQL-sats jag använder nu ser ut såhär:
SQL = "SELECT * FROM [Messages] WHERE [RefForum] = " & Request.Querystring("id") & " AND [First] = True ORDER BY [Lastpost] Desc, [ID] Desc"
Det är alltså [Lastpost] som den sorterar efter. Varje gång man gör ett svar i tråden så uppdateras [Lastpost] med aktuell tid + datum, vilket gör att tråden hoppar högst upp i listan. Detta är ju så långt allt väl.
Dock, om man tar bort det sista inlägget i tråden så är fortfarande värdet kvar i [Lastpost]. Man kan ju inte få tillbaka det värde som var där före.
En sak man kan göra är att kontrollera om det är sista inlägget man tar bort och isf ersätta [Lastpost] med dom värden som det näst sista inlägget har. Dock anser jag detta som en onödig lösning, det borde gå att fixa på andra sätt.
Hur skall man enklast göra? Kan man göra detta direkt med en SQL-sats? Jag vill alltså helst slippa använda [Lastpost] och istället kontrollera direkt ur databasen vilken tråd som skall hamna överst.
Någon som kan hjälpa mig?
265 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25