okey, jag kan inte skriva något i stil med?
sql = "select top 20 * (select count(*) from Kommentarer where artikelid = a.id) as antal from Allt as a order by datum desc"
?
40 svar · 382 visningar · startad av nisslass · sida 2 av 3
Jag har en databas med 6 tabeller. Ett datumfält med datumet (datum) för inlägget och ett autonumber id (id) fält. Jag vill ha en sida som visar de 20 senaste inläggen ur alla tabeller med den senaste först! Baserat på datum eftersom flera tabeller kan ge samma id-nr till olika inlägg eftersom de är i skilda tabeller (oj, trött skrivet) Någon som kan hjälpa mig? Access 2000 btw. :)
Läs hela trådstarten →okey, jag kan inte skriva något i stil med?
sql = "select top 20 * (select count(*) from Kommentarer where artikelid = a.id) as antal from Allt as a order by datum desc"
?
Om du lägger till ett komma efter * så borde det bli ok.
sql = "select top 20 * ,(select count(*) from Kommentarer where artikelid = a.id) as antal from Allt as a order by datum desc"
Jag fick då 0 på antal kommentarer pga av att inga kommentarer hade skrivits *logiskt* när jag då skrev en kommentar fick jag:
Microsoft OLE DB Provider for ODBC Drivers error '80040e07'
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
Fel på "line 9"
8. sql = "select top 20 * ,(select count(*) from Kommentarer where artikelid = a.id) as antal from Allt as a order by datum desc"
9. Set RS = Connection.Execute(SQL)
Njae, där va det "Text"...
När jag ändrade till tal så visade den antal artiklar = 0 fast det skulle vara = 1, och dessutom får jag då samma fel som nu när kommentaren skall hämtas i artikeln, som jag gjort enligt följande:
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open Application("nyhetsdatabasen")
SQL = "SELECT * FROM Kommentarer where artikelid='" & request.querystring("id") & "'"
Set RS = Connection.Execute(SQL)
Det är därför det blir fel. Du försöker jämföra en text med räknare (numeriskt).
Du kan byta typ på kolumnen artikelid i Access så borde det gå bättre.
Jag redigerade mitt tidigare inlägg, kolla det. Får nu fel på ett annat ställe då som skriver :o/
Det skall inte vara några ' kring värdet om kolumnen är av typen tal.
SQL = "SELECT * FROM Kommentarer where artikelid=" & request.querystring("id")
Skriver du ut alla artiklar?
om jag skriver ut dem? nej? )
Du sa att du fick ut 0 kommentarer. Var det på alla artiklar eller bara den första?
Nu fungerar det alltså som det ska.
Kommentarerna visas på rätt ställe och räkningen stämmer!
Tack för hjälpen!!
Får jag vara lite jobbig igen då? hehe om fältet "visa" är = 0 i "kommentarer" ska den inte tas med i räkninen.. eller om visa = 1 ska kommentaren räknas med.. ja du förstår. 0 = icke godkänd
sql = "select top 20 * ,(select count(*) from Kommentarer where artikelid = a.id and visa = 1) as antal from Allt as a order by datum desc"
Nu blev det svårt igen, jag har tagit ett paging script beskrivet här på webForum och fixat att artiklarna som det visas 250 tecken delas upp på fler sidor när de är fler än 15. Men om jag nu vill ha med antalet kommentarer i nedanstående kod, hur göra?:
<%
Dim objConn
Dim strConnString
Dim strSQL
Dim objRS
Dim strName
Dim strComment
Dim dteDate
Dim intPageSize
Dim intPage
Dim intTotalPages
Dim intRecordCount
'## -- connection string, vilken provider och db ska användas --
strConnString = Application("nyhetsdatabasen")
'## -- hur många inlägg ska visas per sida --
intPageSize = 15
'## -- vilken sida ska visas --
intPage = Request.QueryString("page")
'## -- om ingen querystring med sidvärde hittas, visa då första sidan --
If intPage = "" Then intPage = 1
%>
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open Application("nyhetsdatabasen")
strSQL = "SELECT * FROM Allt where kategori='" & Request("kategori") & "' Order by Datum Desc"
'## -- skapa ett recordset --
Set objRS = Server.CreateObject("ADODB.Recordset")
'## -- hur många poster ska visas per sida --
objRS.PageSize = intPageSize
'## -- öppna och hämta alla records --
objRS.Open strSQL, objConn, 3, 1
'## -- vilken sida i recordset uppdelningen ska visas --
objRS.AbsolutePage = intPage
'## -- hur många sidor finns i recordset uppdelningen --
intTotalPages = objRS.PageCount
If objRS.EOF Then
Response.Write "Det finns inga inlägg.<BR>"
Else
'## -- lista alla inlägg som finns i db --
Do Until objRS.EOF or intRecordCount >= intPageSize
intRecordCount = intRecordCount + 1
id= objRS("id")
rubrik = objRS("rubrik")
datum = FormatDateTime(objRS("datum"),2) & " - " & FormatDateTime(objRS("datum"),4)
typ = objRS("typ")
artikel2 = objRS("artikel")
kat = Request("kategori")
If typ = "Artikel" then
artikel = Left(artikel2,250) & "...<BR><a href=""artikel.asp?id=" & id & """" & " class=gb2><läs mer></a> XX KOMMENTARER"
Else
artikel = Left(artikel2,250) & "...<BR><a href=""#"" onClick=""window.open('rec.asp?id=" & id & "&kat=" & kat & "', 'Untitled', 'width=600,height=400,screenX=50,screenY=50,toolbar=no,status=yes,location=no,menubar=no,directories=no,scrollbars=yes,resizable=no')"" class=gb2><läs recensionen></a>"
End If
%>
<span class="date"><%= datum %></span><BR>
<b><span class="vanligrubrik"><%= rubrik %></span></b>
<span class="vanligtext"><br><%= artikel %></span>
</span><hr align="left" noshade color="#348ba1" size="1">
<%
objRS.MoveNext
Loop
End If
'## -- clean up --
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
'## -- visa sidnavigeringen --
'## -- intPage = vilken sida som ska visas --
'## -- intTotalPages = hur många sidor som recordsetet är uppdelat i --
Call PageNavigation(intPage, intTotalPages)
%>
</BODY>
</HTML>
<%
'## -- skapa sid-navigering --
Sub PageNavigation(ByVal WichPage, ByVal HowManyPages)
Dim strScriptName
Dim I
'## -- vilken sida ska navigeringen länka till --
strScriptName = "nyheter.asp?kategori=" & Request("kategori")
'## -- visa föregående, länkat eller olänkat beroende på vilken sida som visas --
If CInt(WichPage) > 1 Then
Response.Write "<A href='" & strScriptName & "&" & "page=" & WichPage - 1 & "' class='gb2'><< Föregående sida</A> "
Else
Response.Write "<span class='vanligtext'><< Föregående sida</span>"
End If
'## -- lista ut alla sidnummer --
For I = 1 To HowManyPages
If CInt(WichPage) <> I Then
Response.Write "<A href='" & strScriptName & "&" & _
"page=" & I & "' class='gb2'>" & I & "</A> "
Else
Response.Write "<span class='vanligtext'> [ <B>" & I & "</B> ] </span>"
End If
Next
'## -- visa Nästa, länkad eller olänkad beroende på vilken sida som visas --
If CInt(WichPage) < CInt(HowManyPages) Then
Response.Write "<A href='" & strScriptName & "&" & _
"page=" & WichPage + 1 & "' class='gb2'>Nästa sida >>"
Else
Response.Write "<span class='vanligtext'>Nästa sida >></span>"
End If
End Sub
%>
XX Kommentarer, där skall antalet kommentarer stå. LarsG förstår nog vad jag menar eftersom vi diskuterat det menar jag. Kan inte bara byta ut strSQL strängen.. har testat
Vad blir det för fel om du använder den sql-fråga som jag skrev med en count?
sql = " select * ,(select count(*) from kommentarer where artikelid = a.id ) as antal from Allt as a order by datum desc"
Någonstans vill jag slänga in en
where kategori='" & kategori & "' etc...
det är nog där det blir fel..
sql = " select * ,(select count(*) from kommentarer where artikelid = a.id ) as antal from Allt as a where kategori = '" & Request("kategori") & "' order by datum desc"
Vill du ha med villkoret att visa = 1 för kommentarerna ?
sql = " select * ,(select count(*) from kommentarer where artikelid = a.id and visa = 1) as antal from Allt as a where kategori = '" & Request("kategori") & "' order by datum desc"
TACKAR!!
Den här då?
Top 10 lista, i "Allt" finns "read" på varje artikel som anger antalet ggr de har lästs. Nu vill jag visa de 10 som är mest lästa med det högsta antalet längst upp.
sql = "select top 10 * from allt order by read desc "
Read är inget bra kolumnnamn, då det är ett reserverat ord i SQL. (Kanske inte i Jet SQL dock.)
sql = "select top 10 * ,(select count(*) from Kommentarer where artikelid = a.id and visa='1') as antal from Allt as a where typ = 'Artikel' order by readtimes desc"
retunerar fler än 10 resultat