Hejsan!
Jag vill sortera trådarna i mitt forum efter senaste svaret.
Så den tråd som senast fått ett svar skall ligga högst upp.
Trådar och svar ligger i samma tabell. Men huvudtrådar har värde 1.
Men om man skapar en ny tråd skall så klart denna ligga högst upp.
Hur ska min SQL sats se ut i koden för att sortera de trådar med det senaste svaret i?
Sql satsen borde se ut såhär.
strSql = "SELECT * FROM [tabell] WHERE [vilkor] ORDER BY [Datum attributet] DESC;"
Desc står för att ändra ordningen så att inte det äldsta skall komma upp först.
Jo jag vet vad DESC och allt det där är....
Men grejen är den att min databas koppling med SQL sats på sidan hämtar ju bara de med värdet 1 ju. :)
Så det är där problemet ligger....
Jag vill inte skriva ut posterna med värde 0 ( som är svaret i en tråd ) Men jag vill ändå sortera efter dom..... Förstår ni :)
LarsGMedlem sedan dec. 200012 464 inlägg select c1, coalesce((select max(postDate) from posts
where posts.answerTo = p.id),p.postDate) as lastDate
from posts p
where answerTo = 0
order by lastDate desc
Flyttas från ASP.
OJ, ledsen att jag postade fel...
Jag var inte helt säker på om det var SQL eller ASP :)
Det där var mej en RIKTIGT krånglig SQL kod du.
Jag har aldrig hört talas om koderna i den satsen.
Nu verkar jag lite snylt aktig som inte gör nåt själv....
Men hur ska jag göra om denna kod så den passar min databas?
I tabellen forum finns följande kolumner:
FID Namn Rubrik Inlagg Svar Datum Locked FIP
FID är ID numret för svaret / tråden. Namn,rubrik och inlagg kan ni själva lista ut vad det är. Svar, ja om det är svar i tråden med ID 4 så får svar kolumnen värdet 4. Det är tal i databasen :) .
Datum, ja det är helt enkelt datumet. Locked är om den är låst eller inte, och FIP är IP numret av den som postade.
Tacksam om LarsG eller någon annan SQL kunnig kunde berätta för mig hur jag egentligen skall göra med koden jag fick av Lasse :)
/Magnus
Jag får felmeddelanden som aldrig förr....
Jag kan verkligen ingen SQL förutom det där grundläggande....
Ni vet SELECT, DELETE, UPDATE och allt det där andra som man lär sig i en bok om grunderna i ASP!
Ingen som kan förklara LarsG's kod?
LarsGMedlem sedan dec. 200012 464 inlägg select FID, Namn, Rubrik, Inlagg, coalesce((select max(Datum) from forum
where forum.svar = p.fid),p.Datum) as lastDate
from forum p
where svar = 0
order by lastDate desc
Vilken DBMS använder du?
Vilka fel får du?
Hur ser frågan ut nu?
Så här ser min databaskoppling ut:
Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("userdatabas.mdb")
SQL = "select FID, Namn, Rubrik, Inlagg, coalesce((select max(Datum) from forum
where forum.svar = p.fid),p.Datum) as lastDate
from forum p
where svar = 0
order by lastDate desc"
Set rs = db.Execute(SQL)
Do until rs.EOF
Och nu finns inte sidan. Inget felmeddelande eller nåt nu.
Jag har brinkster som webbhotell.
kan det vara så att dom inte har stöd för något speciell funktion som används här?
LarsGMedlem sedan dec. 200012 464 inlägg Det är Access som saknar stöd för vissa standardfunktioner.
SQL = "select FID, Namn, Rubrik, Inlagg, " & _
" nz((select max(Datum) from forum " & _
" where forum.svar = p.fid),p.Datum) as lastDate " & _
" from forum p where svar = 0 " & _
" order by 5 desc"
Set rs = db.Execute(SQL)
Hmmm...Får detta felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Undefined function 'nz' in expression.
/slauson/db/forum.asp, line 113
LarsGMedlem sedan dec. 200012 464 inlägg SQL = "select f1.FID, f1.Namn, f1.Rubrik, f1.Inlagg, " & _
" max(iif(f2.Datum is null,f1.datum,f2.datum)) " & _
" from forum f1 left outer join forum f2 " & _
" on f1.fid = f2.svar " & _
" where svar = 0 " & _
" group by f1.FID, f1.Namn, f1.Rubrik, f1.Inlagg " & _
" order by 5 desc"
Nu får jag detta felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Microsoft Access Driver] The specified field 'svar' could refer to more than one table listed in the FROM clause of your SQL statement.
/slauson/db/forum.asp, line 115
@ndersMedlem sedan juni 200032 969 inlägg Du får specificera tabell när du har fler fält med samma namn, i samma resultatset.
tabell.fältnamn
Mvh
Okej, det ska man säkert, men hur gör man det?
:)
SQL är krångligt, jag har ingen aning om hur man skall gå tillväga.
@ndersMedlem sedan juni 200032 969 inlägg Det står ju WHERE svar=0. Se till att det står WHERE tabell.svar=0.
Ahaaaa okej, ska pröva med detsamma :)
Och med den nuvarande koden får jag:
Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 2.
/slauson/db/forum.asp, line 114
Alltså:
<%
Set db = Server.CreateObject("ADODB.Connection")
db.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("userdatabas.mdb")
SQL = "select f1.FID, f1.Namn, f1.Rubrik, f1.Inlagg, " & _
" max(iif(f2.Datum is null,f1.datum,f2.datum)) " & _
" from forum f1 left outer join forum f2 " & _
" on f1.fid = f2.svar " & _
" where forum.svar = 0 " & _
" group by f1.FID, f1.Namn, f1.Rubrik, f1.Inlagg " & _
" order by 5 desc"
Set rs = db.Execute(SQL)
Do until rs.EOF
%>
LarsGMedlem sedan dec. 200012 464 inlägg SQL = "select f1.FID, f1.Namn, f1.Rubrik, f1.Inlagg, " & _
" max(iif(f2.Datum is null,f1.datum,f2.datum)) " & _
" from forum f1 left outer join forum f2 " & _
" on f1.fid = f2.svar " & _
" where f1.svar = 0 " & _
" group by f1.FID, f1.Namn, f1.Rubrik, f1.Inlagg " & _
" order by 5 desc"
Du måste använda prefixet f1 och inte forum.
Felmeddelandet får man oftast när det är något kolumnnamn som inte finns i tabellen