Jag har ett pageing system som fungerar i Access, men nu när jag ska gå över till MySQL funkar den inte.
Har koden:
intPageSize = 50
intPage = Request.QueryString("page")
If intPage = "" Then intPage = 1
strSQL ="SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv, land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM ((land INNER JOIN spelare ON land.landID = spelare.landID)LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID) WHERE playAktiv = 1 ORDER BY "&order_spelare&""
Set objRS = Server.CreateObject("ADODB.Recordset")
With objRS
.ActiveConnection = objConn
.Source = strSQL
.PageSize = intPageSize
.CursorType = 3
.LockType = 1
.Open
End With
'## -- visa rätt sida i recordsetet --
objRS.AbsolutePage = intPage
'## -- hur många sidor består recordsetet av --
intTotalPages = objRS.PageCount
'## -- loopa igenom recordsetet och visa posterna för besökaren/användaren --
Do Until objRS.EOF OR intCounter >= intPageSize
intCounter = intCounter + 1
Call PageNavigationPlayers(intPage, intTotalPages)
Sub PageNavigationPlayers(ByVal Page, TotalPages)
Dim strScriptName
'## -- denna sidas namn --
strScriptName = "index.asp?do=players"
'## -- länk till föregående sida --
'## -- kontrollera att det inte är första sidan som visas --
If CInt(Page) > 1 Then
'## -- inte första sidan som visas så gör en länk --
Response.Write "<a href=""" & strScriptName & "&page=" & Page - 1 & """><< Föregående</a> "
End If
'## -- bygg upp själva pagebaren, dvs varje sidnummer ska ha en länk
'## -- så att besökaren snabbt kan ta sig till rätt sida --
For N = 1 To CInt(TotalPages)
If N <> CInt(Page) Then
'## -- ej aktuell sida, länka --
Response.Write "<a href=""" & strScriptName &"&page=" & N & """>" & N & "</a> "
Else
'## -- aktuell sida, länka ej --
Response.Write "<b>" & N & "</b> "
End If
Next
'## -- länk till nästa sida. om vi står på sista sidan ska den ej vara länkad --
If CInt(Page) < CInt(TotalPages) Then
'## -- vi är inte på sista sidan --
Response.Write "<a href="""&strScriptName&"&page=" & Page + 1 & """>Nästa >></a>"
End If
End Sub
Som jag ser det är det egentligen bara en sql fråga
SELECT
spelare.playID,
spelare.lagID,
spelare.landID AS spelare_landID,
spelare.playFnamn,
spelare.playEnamn,
spelare.playFodd,
spelare.playFodelseort,
spelare.playPosition,
spelare.playSkott,
spelare.playAktiv,
land.landID AS land_landID,
land.land,
land.flagga,
klubbar.lagNamn
FROM
land
INNER JOIN spelare on land.LandId = spelare.landId
LEFT JOIN Klubbar ON spelare.lagId = klubbar.LagId
WHERE
playAktiv = 1 Order By " & order_Spelare
har inte direkt gjort några större ändringar (tagit bort () + rensat lite & "" i slutet ).
tack, men tyvärr så hjälpte det inte. Sidnavigeringen vill inte komma fram, när jag hade Access så syntes den längst ner, men nu e den borta. De 50 första posterna kommer fram, men inte navigeringen
försöker mig på att skriva om uträkningen. har följande:
posterPerSida = 50
Set objRS = objConn.Execute("SELECT COUNT(*) as AntalPoster FROM spelare WHERE playAktiv = 1")
antalPoster = objRS("antalPoster")
objRS.Close
set objRS = nothing
aktuellSida = CLng(Request.QueryString("sida"))
min = 0
max = posterPerSida
if aktuellSida = "" or aktuellSida = 0 then
aktuellSida = 1
end if
if aktuellSida = 1 then
min = 0
max = posterPerSida
else
min = posterPerSida * aktuellSida
max = min + posterPerSida
end if
antalSidor = (antalPoster -(antalPoster mod posterPerSida))/posterPerSida
Set objRS = objConn.Execute("SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv,
land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM land INNER JOIN spelare ON land.landID = spelare.landID LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID
WHERE playAktiv = 1 ORDER BY "&order_spelare&" LIMIT "& min & "," & max&"")
Problemen är följande:
antalSidor blir tom, den innehåller inte uträkningen.
när man kommer in på sidan börjar den på A. men när man har gått fram och sedan ska gå tillbaka till första sidan så hamnar man på B, sida i QueryString måste alltså vara 0 för att komma tillbaka på A.
Vad skulle kunna göra (eftersom det låter som att du inte längre använder Access) använda Offset för att ta reda på var du är. Samt göra en Count(ID) vid varje, bökigt jovisst.
MySQL använder offset för att starta från valt nummer (Räknar till vad man satt offset till och sedan spottar ut posterna).
'##
TotaltAntalPoster = 365 '# Räkna, men i detta fallet ett dummytal
PosterPerSida = 15
AktuellPlats = cInt(Request.QueryString("offset"))
AktuellSida = Round(AktuellPlats/PosterPerSida)
'Response.Write (AktuellPlats &"<br />")
'Response.Write (AktuellSida &"<br />")
TotaltAntalSidor = Round(TotaltAntalPoster/PosterPerSida)
min = AktuellPlats
max = aktuellplats + PosterPerSida
'Set objRS = objConn.Execute("SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv,
'land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM land INNER JOIN spelare ON land.landID = spelare.landID LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID
'WHERE playAktiv = 1 ORDER BY "&order_spelare&" LIMIT "& min & "," & max &"")
' # Loopa ut alla poster här enligt principen nedan.
For J = min To max - 1
IF J <= TotaltAntalPoster Then
Response.Write ( J &"<br />"& vbCrlf)
End IF
Next
' # Visar textfunktionaliteten
IF AktuellSida > 1 Then
Response.Write ("<a href='visaposter.asp?offset="& AktuellPlats - PosterPerSida &"'>Tidigare</a>")
Else
Response.Write ("Tidigare")
End IF
Response.Write (" || ")
For i = 1 To TotaltAntalSidor
IF I = AktuellSida Then
Response.Write ( i &" ")
Else
Response.Write(" <a href='visaposter.asp?offset="& I*PosterPerSida &"'>"& I &"</a> ")
End IF
Next
IF AktuellSida < TotaltAntalSidor Then
Response.Write ("<a href='visaposter.asp?offset="& AktuellPlats + PosterPerSida &"'>Nästa</a>")
Else
Response.Write ("Nästa")
End IF
Koden ovan bör fungera, smällde ihop på ett par minuter ;) Ändra bara så att du får med din count och så du loopar ut dina poster...
Dessutom har du gjort fel med antalSidor, ska se ut enligt nedan, men nu behövs det inte efter min fix :moose :
antalSidor = (antalPoster -(antalPoster mod posterPerSida)/posterPerSida)
TotaltAntalPoster = 365 '# Räkna, men i detta fallet ett dummytal
PosterPerSida = 15
AktuellPlats = cInt(Request.QueryString("sida"))
AktuellSida = Round(AktuellPlats/PosterPerSida)
'Response.Write (AktuellPlats &"<br />")
'Response.Write (AktuellSida &"<br />")
TotaltAntalSidor = Round(TotaltAntalPoster/PosterPerSida)
min = AktuellPlats
max = aktuellplats + PosterPerSida
Set objRS = objConn.Execute("SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv, land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM land INNER JOIN spelare ON land.landID = spelare.landID LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID WHERE playAktiv = 1 ORDER BY "&order_spelare&" LIMIT "& min & "," & max&"")
IF objRS.EOF THEN
Response.Write "<tr><td id=""resultat_saknas"" colspan=""8"">Det finns inga spelare att visa</td></tr>"
ELSE
For J = min To max - 1
IF J <= TotaltAntalPoster Then
%>
<tr class="spelare_tabell_brodtext spelare_tabell_varannan">
<td class="spelare_tabell_lank">
<a title="Visa spelarinfo" href="index.asp?do=players&play=player&ID=<%=objRS("playID")%>">
<%response.Write ""&objRS("playEnamn")&", "&objRS("playFnamn")&""%>
</a>
</td>
</tr>
<%
end if
Next
end if
objRS.Close
Set objRS = nothing
%>
<%
'## Sidnavigeringen ##'
response.Write "<div class=""spelare_sidNavigering"">"
'Response.Write intPage
'Response.Write "<br />"
'Response.Write intTotalPages
IF AktuellSida > 1 Then
Response.Write ("<a href='index.asp?do=players&offset="& AktuellPlats - PosterPerSida &"'>Tidigare</a>")
Else
Response.Write ("Tidigare")
End IF
Response.Write (" || ")
For i = 1 To TotaltAntalSidor
IF I = AktuellSida Then
Response.Write ( i &" ")
Else
Response.Write(" <a href='index.asp?do=players&sida="& I*PosterPerSida &"'>"& I &"</a> ")
End IF
Next
IF AktuellSida < TotaltAntalSidor Then
Response.Write ("<a href='index.asp?do=players&sida="& AktuellPlats + PosterPerSida &"'>Nästa</a>")
Else
Response.Write ("Nästa")
End IF
response.Write "</div>"
sidnumreringen funkar inte så bra?
index.asp?do=players&sida=30
blir den på sida 2 :S
SET rsCount = Server.CreateObject("ADODB.RecordSet")
SET rsCount = objConn.Execute ("SELECT Count(ID) As AntalPoster FROM din tabell WHERE playAktiv = 1 ")
TotaltAntalPoster = cInt(rsCount("AntalPoster")) ' ## kollar antalet poster för att göra rätt beräkningar
rsCount.Close
SET rsCount = Nothing
'TotaltAntalPoster = 365 '# Räkna, men i detta fallet ett dummytal
PosterPerSida = 15
AktuellPlats = cInt(Request.QueryString("offset"))
AktuellSida = Round(AktuellPlats/PosterPerSida)
'Response.Write (AktuellPlats &"<br />")
'Response.Write (AktuellSida &"<br />")
IF Request.QueryString("offset") = "" Then
AktuellPlats = 0
AktuellSida = 1
End IF
TotaltAntalSidor = Round(TotaltAntalPoster/PosterPerSida)
min = AktuellPlats
max = aktuellplats + PosterPerSida
Set objRS = objConn.Execute("SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv, land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM land INNER JOIN spelare ON land.landID = spelare.landID LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID WHERE playAktiv = 1 ORDER BY "&order_spelare&" LIMIT "& min & "," & max&"")
' # Kontroll ser till att du får rätt antal poster per sida.
Kontroll = min
Do until objRS.EOF OR Kontroll = Max - 1
%>
<tr class="spelare_tabell_brodtext spelare_tabell_varannan">
<td class="spelare_tabell_lank">
<a title="Visa spelarinfo" href="index.asp?do=players&play=player&ID=<%=objRS("playID")%>">
<%response.Write ""&objRS("playEnamn")&", "&objRS("playFnamn")&""%>
</a>
</td>
</tr>
%>
Kontroll = Kontroll + 1
objRS.MoveNext
Loop
' # Loopa ut alla poster här enligt principen nedan.
' For J = min To max - 1
' IF J <= TotaltAntalPoster Then
' Response.Write ( J &"<br />"& vbCrlf)
' End IF
' Next
objRS.Close
SET objRS = Nothing
%>
<%
' # Visar Tidigare, Antal sidor, samt Nästa sida - allt för navigeringens skull ;-)
' Några få ändringar sedan sist, men bugfixar och liknande
response.Write "<div class=""spelare_sidNavigering"">"
IF AktuellSida > 0 Then
Response.Write ("<a href='index.asp?do=players&sida="& AktuellPlats - PosterPerSida &"'>Tidigare</a>")
Else
Response.Write ("Tidigare")
End IF
Response.Write (" || ")
z = 1
For i = 0 To TotaltAntalSidor
IF I = AktuellSida Then
Response.Write ( z &" ")
Else
Response.Write(" <a href='index.asp?do=players&sida="& I*PosterPerSida &"'>"& z &"</a> ")
End IF
z = z + 1
Next
Response.Write (" || ")
IF AktuellSida < TotaltAntalSidor Then
Response.Write ("<a href='index.asp?do=players&sida="& AktuellPlats + PosterPerSida &"'>Nästa</a>")
Else
Response.Write ("Nästa")
End IF
response.Write "</div>"
Jag har moddat mitt "skript" så att det bör fungera för dig nu - vill du kan du ju göra egna utträkningar för att få "sida" till att vara sida och inte offset - som det fungerar nu för övrigt. Du bör dock kika igenom första anropet (där man räknar ut totalt antal poster för totala sammanräkningen) då du ska skriva in ditt tabellnamn där.
Även gjort mindre bugfixningar i navigeringen så att det ska stämma lite bättre. Lycka till nu då för nu är det tekniskt sett bara att klippa och klistra över ditt förra skriveri.
ok tack, nu kommer det inte fram samma poster. men navigeringen funkar inte. det står bara 1.
när man trycker på tillbaka så blir det:
index.asp?do=players&sida=-50
ok tack, nu kommer det inte fram samma poster. men navigeringen funkar inte. det står bara 1.
när man trycker på tillbaka så blir det:
index.asp?do=players&sida=-50
framåt går inte klicka på :r
Suck. Ändra alla Request.QueryString("offset") till Request.QueryString("sida"). Klart det inte navigeringen fungerar då. :OO
Tydligen missat ett par.
/R:
Du får göra en egen fix så att man inte kan gå minus på pagingsystemet. ;)
IF Summan av = aktuellsida - antalposterpersida < 0 Then
aktuellsida = 0
End IF
eller nåt sånt nere vid "tidigare"-navigationen. Se igenom och så. Det klarar du väl själv?
fixat, men problemet är att det bara kommer fram en etta, rätt "svar" ska vara 1 tom 15. Går trycka tillbaka, blir då
index.asp?do=players&sida=-50
sen framåt
index.asp?do=players&sida=0