webForumDet fria alternativet
Logga in / Bli medlem

Problem med SQL-sats

Databaser & SQL

22 svar · 619 visningar · startad av lillebror

Medlem sedan apr. 20041 597 inlägg
Trådstart#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

Medlem sedan dec. 200012 464 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
Medlem sedan apr. 20041 597 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...

Medlem sedan okt. 20005 273 inlägg
#4

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

mv icaaq

Medlem sedan dec. 200012 464 inlägg
#5

Vilken feltext får du?

Medlem sedan apr. 20041 597 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?

Medlem sedan dec. 200012 464 inlägg
#7

Vilken dbms?

Medlem sedan apr. 20041 597 inlägg
#8

Microsoft Access 2000!

Medlem sedan dec. 200012 464 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
Medlem sedan apr. 20041 597 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

Medlem sedan dec. 199917 055 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).

Medlem sedan dec. 199917 055 inlägg
#12

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

Medlem sedan apr. 20041 597 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

Medlem sedan dec. 199917 055 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
Medlem sedan apr. 20041 597 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

Medlem sedan dec. 200012 464 inlägg
#16

Nej, det skall vara två ((.

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

Medlem sedan apr. 20041 597 inlägg
#17

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

Medlem sedan apr. 20041 597 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

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

266 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)