Visa senaste inlägg från DB
40 svar · 336 visningar · startad av nisslass · sida 2 av 3
Frågan, av nisslass
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 frågan i sin helhet →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"
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 13 dec 2001]
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)
------------------
-Nicke-
nSoft.nu
[Redigerat av nisslass den 13 dec 2001]
Vilken datatyp har kolumnen artikelid?
Den borde vara definierad som tal.
------------------
essentitia preter non sans multiplicandum
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)
------------------
-Nicke-
nSoft.nu
[Redigerat av nisslass den 13 dec 2001]
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.
------------------
essentitia preter non sans multiplicandum
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?
------------------
essentitia preter non sans multiplicandum
Du sa att du fick ut 0 kommentarer. Var det på alla artiklar eller bara den första?
------------------
essentitia preter non sans multiplicandum
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"
------------------
essentitia preter non sans multiplicandum
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 ;)
------------------
-Nicke-
nSoft.nu
[Redigerat av nisslass den 13 dec 2001]
Vad blir det för fel om du använder den sql-fråga som jag skrev med en count?
------------------
essentitia preter non sans multiplicandum
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"
------------------
essentitia preter non sans multiplicandum
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.)
------------------
essentitia preter non sans multiplicandum