lillebrorMedlem sedan apr. 20041 687 inlägg
Jag håller på att designa ett forum. Forumet i sig fungerar bra. Nu har jag dock ett litet litet problem med en SQL-sats.
I forumet skriver man in nya inlägg var på de sorteras i den ordning de blev inlagda. Nu vill jag göra så att när en tråd har fått ett nytt svar så hamnar den högst upp i listan för att visa användaren att det är den tråd som har fått ett svar senast, lite som webforum tror jag.
Så här ser SQL-satsen ut...
SqlListThread = "SELECT * FROM t_threads WHERE FORUMID = " & request.querystring("xforumID") & " AND ANSWERID=0 ORDER BY THREADID DESC"
När en post i t_threads har fältet ANSWERID=0 indikerar det att det är en huvudtråd. Är det ett svar på en huvudtråd har ANSWERID det threadID huvudtråden har.
Jag vill sortera en tråd efter vilket forum det tillhör samt det svar tillhörande aktuell tråd som är inlagt senast. Tillräckligt luddigt? Om det är något som behöver vidarutvecklas så gör jag gärna det :)
Tabellen ser ut så här...
Threads
============
ID
ThreadID
ForumID
Subject
Author
NumberOfAnswer
AnswerID
Date
Hits
Content
LarsGMedlem sedan dec. 200012 465 inlägg
select <kolumner>,coalesce((select max(date) from threads
where answerid = t.threadid),date) as orderDate
from threads t
order by orderDate desc
lillebrorMedlem sedan apr. 20041 687 inlägg
Får ett felmeddelande när jag kör SQL-satsen (error '80004005' ). Så här ser den ut i min kod.
SqlListThread = "select subject, author, date, coalesce((select max(date) from t_threads where answerid = t.threadid),date) as orderDate from t_threads torder by orderDate desc"
Min tabell heter t_threads...
icaaqMedlem sedan okt. 20004 910 inlägg
Testa att klammra [] ordet date som kan (är?) ett reserverat ord..
mv icaaq
LarsGMedlem sedan dec. 200012 465 inlägg
lillebrorMedlem sedan apr. 20041 687 inlägg
error '80004005'
/forumdisplay.asp, line 27
det är själva feltexten och på line 27 körs Set objRS = Conn.Execute(SqlListThread)
felmeddelandet syftar på att det är något knas i sql-satsen?
LarsGMedlem sedan dec. 200012 465 inlägg
lillebrorMedlem sedan apr. 20041 687 inlägg
LarsGMedlem sedan dec. 200012 465 inlägg
Det är bra om du nämner det direkt. Access följer inte SQL-standarden.
select nvl((select max([date] from t_threads
where answerid = t.threadid) ,[date]) , <kolumner>
from t_threads t
order by 1 desc
lillebrorMedlem sedan apr. 20041 687 inlägg
torder, ska det vara t order (med ett mellanrum)?
skriver jag "," mellan de kolumner jag vill ha u i recordsetet?
får nu följande felmeddelande...
Microsoft JET Database Engine error '80040e14'
Syntax error. in query expression 'nvl((select max([date] from t_threads where answerid = t.threadid) ,[date]) , author, date, subject from t_threads t order by 1 desc'.
/forumdisplay.asp, line 26
RikardMedlem sedan dec. 19998 623 inlägg
Hej brorsan. :)
Jepp, det ska vara t order - med mellanrum. Det det egentligen står är:
"from t_threads as t"
t är bara ett substitut för t_threads - t.ex. t.threadid skulle lika gärna kunna skrivas t_threads.threadid. Men! Genom att göra som LarsG föreslår så skapar man ett alias (t) för tabellen (t_threads).
RikardMedlem sedan dec. 19998 623 inlägg
Kan du skriva ut SQL-satsen?
(Response.Write SqlListThread)
lillebrorMedlem sedan apr. 20041 687 inlägg
SQL-sats: select nvl((select max([date] from t_threads where answerid = t.threadid) ,[date])) , author date subject from t_threads t order by 1 desc
Microsoft JET Database Engine error '80040e14'
Syntax error. in query expression 'nvl((select max([date] from t_threads where answerid = t.threadid) ,[date]))'.
/forumdisplay.asp, line 26
RikardMedlem sedan dec. 19998 623 inlägg
En gissning, då jag är osäker på vad nvl är, är att ta bort en av de första parenteserna.
select nvl(select max([date] from t_threads
where answerid = t.threadid) ,[date]) , <kolumner>
from t_threads t
order by 1 desc
lillebrorMedlem sedan apr. 20041 687 inlägg
Nu ser det ut som följer...
SQL-sats: select nvl(select max([date] from t_threads where answerid = t.threadid) ,[date]) , author from t_threads t order by 1 desc
Microsoft JET Database Engine error '80040e14'
Syntax error. in query expression 'nvl(select max([date] from t_threads where answerid = t.threadid) ,[date])'.
/forumdisplay.asp, line 27
LarsGMedlem sedan dec. 200012 465 inlägg
Nej, det skall vara två ((.
Däremot så heter funktionen nz och inte nvl.
lillebrorMedlem sedan apr. 20041 687 inlägg
ok...ska pröva med det...:)
lillebrorMedlem sedan apr. 20041 687 inlägg
Nu får jag fel i följande del av uttrycket...
Microsoft JET Database Engine error '80040e14'
Syntax error. in query expression 'nz(select max([ThreadPosted] from t_threads where answerid = t.threadid) ,[ThreadPosted])'.
/forumdisplay.asp, line 29
LarsGMedlem sedan dec. 200012 465 inlägg
nz((select max([ThreadPosted] from t_threads where answerid = t.threadid) ,[ThreadPosted])'
lillebrorMedlem sedan apr. 20041 687 inlägg
Nu använder jag denna kod men får fortfarande upp samma felmeddelande. Jag förstår inte vad som är felet...
SqlListThread = "SELECT nz((select max([ThreadPosted] from t_threads where answerid = t.threadid) ,[ThreadPosted]) ,author, subject from t_threads t order by 1 desc"
:OO