webForumDet fria alternativet

Visa senaste inlägg från DB

ASP

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 →
Medlem sedan nov. 2001348 inlägg
#21

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"

?

------------------
-Nicke-
nSoft.nu

Medlem sedan dec. 200012 464 inlägg
#22

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]

Medlem sedan nov. 2001348 inlägg
#23

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]

Medlem sedan dec. 200012 464 inlägg
#24

Vilken datatyp har kolumnen artikelid?

Den borde vara definierad som tal.

------------------
essentitia preter non sans multiplicandum

Medlem sedan nov. 2001348 inlägg
#25

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]

Medlem sedan dec. 200012 464 inlägg
#26

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

Medlem sedan nov. 2001348 inlägg
#27

Jag redigerade mitt tidigare inlägg, kolla det. Får nu fel på ett annat ställe då som skriver :o/

------------------
-Nicke-
nSoft.nu

Medlem sedan dec. 200012 464 inlägg
#28

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

Medlem sedan nov. 2001348 inlägg
#29

om jag skriver ut dem? nej? :o)

------------------
-Nicke-
nSoft.nu

Medlem sedan dec. 200012 464 inlägg
#30

Du sa att du fick ut 0 kommentarer. Var det på alla artiklar eller bara den första?

------------------
essentitia preter non sans multiplicandum

Medlem sedan nov. 2001348 inlägg
#31

Nu fungerar det alltså som det ska.

Kommentarerna visas på rätt ställe och räkningen stämmer! :)

Tack för hjälpen!! :)

------------------
-Nicke-
nSoft.nu

[Redigerat av nisslass den 13 dec 2001]

Medlem sedan nov. 2001348 inlägg
#32

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

------------------
-Nicke-
nSoft.nu

Medlem sedan dec. 200012 464 inlägg
#33
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

Medlem sedan nov. 2001348 inlägg
#34

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]

Medlem sedan dec. 200012 464 inlägg
#35

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

Medlem sedan nov. 2001348 inlägg
#36
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..

------------------
-Nicke-
nSoft.nu

Medlem sedan dec. 200012 464 inlägg
#37
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

Medlem sedan nov. 2001348 inlägg
#38

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. :)

------------------
-Nicke-
nSoft.nu

Medlem sedan dec. 200012 464 inlägg
#39
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

Medlem sedan nov. 2001348 inlägg
#40
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 :(

------------------
-Nicke-
nSoft.nu

269 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)