webForumDet fria alternativet

Problem med SQL-sats

22 svar · 619 visningar · startad av lillebror

lillebrorMedlem sedan apr. 20041 687 inlägg
#1

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
#2
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
#3

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
#4

Testa att klammra [] ordet date som kan (är?) ett reserverat ord..

mv icaaq

LarsGMedlem sedan dec. 200012 465 inlägg
#5

Vilken feltext får du?

lillebrorMedlem sedan apr. 20041 687 inlägg
#6

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
#7

Vilken dbms?

lillebrorMedlem sedan apr. 20041 687 inlägg
#8

Microsoft Access 2000!

LarsGMedlem sedan dec. 200012 465 inlägg
#9

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
#10

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
#11

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
#12

Kan du skriva ut SQL-satsen?
(Response.Write SqlListThread)

lillebrorMedlem sedan apr. 20041 687 inlägg
#13

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
#14

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
#15

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
#16

Nej, det skall vara två ((.

Däremot så heter funktionen nz och inte nvl.

lillebrorMedlem sedan apr. 20041 687 inlägg
#17

ok...ska pröva med det...:)

lillebrorMedlem sedan apr. 20041 687 inlägg
#18

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
#19
nz((select max([ThreadPosted] from t_threads where answerid = t.threadid) ,[ThreadPosted])'
lillebrorMedlem sedan apr. 20041 687 inlägg
#20

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

Genererad på 386 ms · cache AV · v20260730165559-full.f96bc7eb