webForumDet fria alternativet

Senaste händelse (funktion till ett forum)

ASP

9 svar · 408 visningar · startad av flexish

Medlem sedan jan. 200548 inlägg
Frågan#1

Tjena alla!

Jag har håller på att bygga ett forum och på förstasidan vill jag att det skall finnas en kolumn där det står senaste händelse i varje forum. Mitt problem är att jag har två separata tabeller för trådar och svar i min databas (Access) men jag vill hämta den senaste händelsen...oavsett om det är en tråd eller ett svar. Jag vet inte riktigt hur jag ska bygga upp min SQL-fråga för att göra detta.

Tabellerna ser ut enligt följande:

tblThread
- threadId (trådens id)
- forumId (i vilket forum tråden skall vara)
- threadName (rubriken på tråden)
- threadAuthor (den som skrivit tråden)
- threadText (själva inlägget)
- threadDateTime (när det skrevs)

tblPost
- postId (svarets id)
- threadId (vilken tråd svaret tillhör)
- forumId (vilket forum svaret ligger i)
- postName (rubrik på svaret)
- postAuthor (vem som har skrivit svaret)
- postText (inlägget)
- postDateTime (när inlägget skrevs)

Någon som kan hjälpa mig att utforma SQL-frågan så den väljer det som hänt senast oavsett i vilken tabell det är?

Tack på förhand!

Med vänlig hälsning
Stefan

Medlem sedan sep. 2003301 inlägg
#2

Hmm har du inte möjlighet att lägga detta i en Applications variabel...

Langa upp en funktion som skriver i En Applications variabel den senaste händelsen. Så slipper du fråga databasen med en helt onödigt fråga...

Medlem sedan jan. 200548 inlägg
#3

Fraggel skrev:

Hmm har du inte möjlighet att lägga detta i en Applications variabel...

Langa upp en funktion som skriver i En Applications variabel den senaste händelsen. Så slipper du fråga databasen med en helt onödigt fråga...

Hur menar du?

Medlem sedan juni 200032 967 inlägg
#4

Fraggel menar:

Vid varje gång något händer i databasen, skriv händelsen till en applikationsvariabel:

Application("LastEvent") = "Pelle skrev ett inlägg i tråden <i>Gratis pengar</i>."

Sedan skriver du bara ut innehållet i applikationsvariabeln där du vill skriva ut det senaste som hänt:

Response.write Application("LastEvent")

Det kan ju dock bli väldigt många ställen att lägga till koden på.

En SQL-fråga för att hämta senaste tråd/inlägg, kanske kan se ut något liknande denna:

SELECT TOP 1 * FROM tblThread
LEFT JOIN tblPost ON tblThread.threadID = tblPost.threadID
ORDER BY Iif(tblPost.postDateTime IS NULL, #1970-01-01#, postDateTime) DESC,
threadDateTime DESC

I din asp-kod börjar du sedan med att kontrollera om fältet postDateTime är null eller inte, så du vet vilka fält du ska skriva ut från ditt recordset.

Slutligen: välkommen till webForum!

mvh

Medlem sedan jan. 200548 inlägg
#5

Tack @nders,

jag ska testa din kod och se om det funkar korrekt.

Medlem sedan jan. 200548 inlägg
#6

Jag får det inte riktigt att fungera...

Den klagar på att "Objektet kunde inte hittas..." vilket är konstigt med tanke på att allt finns och jag har gjort en kontroll som kollar ifall den inte innehåller något värde.

Medlem sedan juni 200032 967 inlägg
#7

Visa kod.

Du har inte råkat skriva fel på ett fältnamn i asp-koden när du ska använda data ifrån recordsetet?

Medlem sedan jan. 200548 inlägg
#8

Koden ser ut enligt följande:

strSQL = "SELECT TOP 1 * FROM tblThread LEFT JOIN tblPost ON tblThread.threadId = tblPost.threadId WHERE tblThread.forumId = " & cLng(rsForum(0)) & " ORDER BY Iif(tblPost.postDateTime IS NULL, #1970-01-01#, postDateTime) DESC, threadDateTime DESC"
set rsLatest = objConn.Execute(strSQL)

if not rsLatest.EOF then
	if IsNull(rsLatest("postDateTime")) then						
		Response.Write "<td class=""forum"">" & rsLatest("threadDateTime") & "<br>"
		Response.Write "<b>Av:</b> " & rsLatest("threadAuthor") & " <a href=""thread.asp?id=" & rsLatest("threadId") & """><img src=""grafik/pil.gif"" border=""0"" alt=""Gå till tråden"" title=""Gå till tråden""></a></td>"
	else
		Response.Write "<td class=""forum"">" & rsLatest("postDateTime") & "<br>"
		Response.Write "<b>Av:</b> " & rsLatest("postAuthor") & " <a href=""thread.asp?id=" & rsLatest("threadId") & """><img src=""grafik/pil.gif"" border=""0"" alt=""Gå till tråden"" title=""Gå till tråden""></a></td>"
	end if
else
	Response.Write "<td>&nbsp; </td>"
end if
Medlem sedan juni 200032 967 inlägg
#9

Du måste nog förresten ha med båda tabellerna i SELECT. Så här:

strSQL = "SELECT TOP 1 tblThread.*, tblPost.* FROM tblThread LEFT JOIN tblPost ON tblThread.threadId = tblPost.threadId WHERE tblThread.forumId = " & cLng(rsForum(0)) & " ORDER BY Iif(tblPost.postDateTime IS NULL, #1970-01-01#, postDateTime) DESC, threadDateTime DESC"

mvh

Medlem sedan jan. 200548 inlägg
#10

Tack det fungerade perfekt!

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)