webForumDet fria alternativet

paging för mysql

ASP

21 svar · 561 visningar · startad av WebbisNet

Medlem sedan feb. 20032 027 inlägg
Frågan#1

till att börja med så vill jag säga att jag har sökt här utan att hitta en lösning på mitt problem.

min paging nu när jag migrerar från access till mysql ser ut så här

Set objRs = Server.Createobject("Adodb.Recordset")
strSQL = "SELECT mailRead, username, mailDate, mailTime, sender, Headline, message, mailID,Reciever "&_
"FROM tblUsers INNER JOIN tblUsers_imail ON tblUsers.userID = tblUsers_imail.sender "&_
"WHERE Reciever=" & Session("userID") &" order by mailID desc"
strConString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=databasadress;PORT=3306;DATABASE=användarnamn;USER=användarnamn;PASSWORD=lösenord;OPTION=3;"

'================================================================================================
function getPreviousLink( intp )
  if intp > 1 then
    getPreviousLink = " <a class=""menu"" href='?p=" & intp - 1 & "'> &laquo; Föregående</a> "
    else
        If intp < 2 then
              response.write "&nbsp;"
        end if  
  end if
end function
'================================================================================================

'================================================================================================
function getNextLink( intPageId, intPageCount )
  if cint( intpageId ) <> cint( intPageCount ) then
    getNextLink = " <a class=""menu"" href='?p=" & intp + 1 & "'> Nästa &raquo;</a> "
        else
    getNextLink = " Nästa »"
  end if
end function
'================================================================================================

'================================================================================================
function getLastLink( intPageCount )
  getLastLink = " <a class=""menu"" href='?p=" & intPageCount & "'>Sista sidan</a> "
end function
'================================================================================================

'================================================================================================
function getPageInfo( intp, intPageCount )
  getPageInfo = "<a class=""menu""> Sida: " & intp & " </a>"
end function
'================================================================================================

intp = request.querystring( "p" )
if intp = "" then intp = 1

with objRs
	.cursorlocation = 3
  	.open strSQL, strConString
  	.pagesize = 20
end with

If objRs.EOF Then
	Response.Write "Din inbox är tom<p>"
Else
	intPages = cint(objRs.pagecount)
	intCurrentPost = 0
	objRs.absolutepage = intp
	
	
	Do while not objRs.eof and intCurrentPost < objRs.pagesize
nummer = nummer + 1
If nummer Mod 2 = 0 Then
color = "#FFFFFF" 
Else
color = "#EEEEEE"
end if

först och främst så får jag felmeddelande när jag har order by mailID och tar jag bort den så klagar den på raden .open strSQL, strConString

är det nåt speciellt för mysql i den här pagingen?

Medlem sedan juni 200032 967 inlägg
#2

Använd LIMIT för paging.

http://www.webforum.nu/showthread.php?s=&forumid=22&threadid=62531

Medlem sedan feb. 20032 027 inlägg
#3

@nders skrev:

Använd LIMIT för paging.

http://www.webforum.nu/showthread.php?s=&forumid=22&threadid=62531

var i min kod ska jag lägga in limit, vet bara var jag ska ha den när jag byter ut top, vilka ställen ska man ändra på?

Medlem sedan feb. 20032 027 inlägg
#4

Ingen som har nåt bra förslag?

Medlem sedan feb. 20032 027 inlägg
#5

har även testat med denna kopplingssträng

strConString=("DRIVER={MySQL ODBC 3.51 Driver};SERVER=databasadress;PORT=3306;DATABASE=anvnamn; USER=anvnamn;PASSWORD=lösenord;OPTION=3;" )

och jag får med den
Microsoft OLE DB Provider for ODBC Drivers error '80004005'
[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified

Medlem sedan apr. 20031 660 inlägg
#6

HEJ!

För mig verkar det som att du har två problem, eller tror du LIMIT/TOP ger ett "Data source name"-fel?

Medlem sedan feb. 20032 027 inlägg
#7

nån som kan se vad som är fel här
"WHERE Reciever=" & Session("userID") &" order by mailID LIMIT " & (page-0) * pagesize & "," & pageSize

jag får
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-4.0.23a-log]You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by mailID LIMIT 20,20' at line 1

/inside/mail/meddelanden.asp, line 71

Medlem sedan dec. 200012 464 inlägg
#8

skriv ut hela sql-satsen.

Jag skuller gissa att det står

where reciever = order by ....

dvs Session("userID") är odefinierat.

Medlem sedan feb. 20032 027 inlägg
#9

LarsG skrev:

skriv ut hela sql-satsen.

Jag skuller gissa att det står

where reciever = order by ....

dvs Session("userID") är odefinierat.

ändrade om och la userID i en varibel

nu får jag
ADODB.Field error '80020009'

Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.

/inside/mail/meddelanden.asp, line 0

jag ska ha en himla massa poster i databasen

Medlem sedan juni 200032 967 inlägg
#10

WebbisNet skrev:

jag ska ha en himla massa poster i databasen

Fler än 20 på aktuell användare?

Hur ser alltså den färdiga SQL-frågan ut?

Medlem sedan feb. 20032 027 inlägg
#11

@nders skrev:

WebbisNet skrev:

jag ska ha en himla massa poster i databasen

Fler än 20 på aktuell användare?

Hur ser alltså den färdiga SQL-frågan ut?

på mitt konto ska jag ha 35 sidor enligt pagingen

När jag skriver ut satsen (jag har id 1)
SELECT mailRead, username, mailDateTime, sender, Headline, message, mailID,Reciever FROM tblUsers INNER JOIN tblUsers_imail ON tblUsers.userID = tblUsers_imail.sender WHERE Reciever=1 order by mailID LIMIT 20,20

Medlem sedan juni 200032 967 inlägg
#12

Du har alltså c:a 700 meddelanden adresserade till dig? Hur ser koden ut när du tar ut antalet sidor i pagingen?

Medlem sedan feb. 20032 027 inlägg
#13
<%Dim sql, pages, page, pageSize, myGetrow, i
uid=Session("userID")
page = Request.QueryString("n")
pageSize = 20
If not isnumeric(page &"") then page = 1 else page = cint(page)
pages = "SELECT COUNT(*) FROM tblUsers_imail"
set connection = Server.Createobject("adodb.connection")
connection.Open "DRIVER={MySQL ODBC 3.51 Driver};DATABASE=XXXXXX;UID=XXXXXX;PWD=XXXXXX;SERVER=XXXXXXX;"
Set ObjRs = connection.execute(pages) : pages = cint((ObjRs(0)-1)/pageSize + 1)
sql = "SELECT mailRead, username, mailDateTime, sender, Headline, message, mailID,Reciever "&_
"FROM tblUsers INNER JOIN tblUsers_imail ON tblUsers.userID = tblUsers_imail.sender "&_
"WHERE Reciever=" & uid &" order by mailID LIMIT " & (page-0) * pagesize & "," & pageSize
'response.write sql
'response.end
Set ObjRs = connection.execute(sql)
If not ObjRs.eof then myGetrow = ObjRs.getrows()

If isarray(myGetrow) then
    For i = 0 to ubound(myGetrow,2)
    

	'------------------------------------------------'
	Dim  mailRead, sender, username, mailDateTime, mailID, Headline
	mailRead = myGetrow(0,i)
	username = myGetrow(1,i)
	mailDateTime = myGetrow(2,i)
	sender = myGetrow(3,i)
	Headline = myGetrow(4,i)
	mailID = myGetrow(5,i)
	'------------------------------------------------'
%>
	
Här listas avsändare, datum, rubrik

<%
If page > 1 then
    Response.write "<a href=""?n=" & page - 1 & """>Bakåt</a> "
End if

If page < pages then
    Response.write " <a href=""?n=" & page + 1 & """>Framåt</a>"
End if

Response.write "<br>Visar sida <b>"& page &"</b> av <b>"& pages &"</b>"

ObjRs.Close : set ObjRs = nothing
connection.close : set connection = nothing
%>
Medlem sedan juni 200032 967 inlägg
#14

Antalet sidor beräknar du ju på totala antalet poster, inte antalet som är adresserade till dig.

Medlem sedan feb. 20032 027 inlägg
#15

@nders skrev:

Du har alltså c:a 700 meddelanden adresserade till dig? Hur ser koden ut när du tar ut antalet sidor i pagingen?

När jag gör en räkning med
SELECT Count(Reciever) as Antal
FROM tblUsers_imail where Reciever=1
så ska jag ha 251 poster till mig

Medlem sedan juni 200032 967 inlägg
#16

Kör exakt samma villkor som i SQL-frågan som hämtar posterna, dvs inkludera join-villkoret också.

Medlem sedan feb. 20032 027 inlägg
#17

då får jag ut 208 rader med alla pm som har id 1 som mottagare, dvs till mig

SELECT mailRead, username, mailDateTime, sender, Headline, message, mailID,Reciever
FROM tblUsers INNER JOIN tblUsers_imail ON tblUsers.userID = tblUsers_imail.sender
WHERE Reciever=1 order by mailID

Medlem sedan feb. 20032 027 inlägg
#18

Några fler förslag?

Medlem sedan apr. 20031 660 inlägg
#19

HEJ!

Ja, jag vet inte var du är, men denna rad ser konstig ut:
Set ObjRs = connection.execute(pages) : pages = cint((ObjRs(0)-1)/pageSize + 1)

Hur kan ObjRS(0) innehålla något INNAN frågan körs?

Å andra sidan verkar det fungera eftersom du kan skriva ut sql:en.

Medlem sedan feb. 20032 027 inlägg
#20

jag löste det för länge sen, glömde bara skriva det

Det var fel ordning på nuffrorna här
mailRead = myGetrow(0,i)
username = myGetrow(1,i)
mailDateTime = myGetrow(2,i)
sender = myGetrow(3,i)
Headline = myGetrow(4,i)
mailID = myGetrow(5,i)

274 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
132 ms — ändringar (db)