RE: [PHP] limiting rows and pages like google
How about limiting results? eg limit the return page value after a certain number (say 10) to every 5 pages, then 50 pages a la google. Page 1 2 3 4 5 6 7 8 9 10 ..15 ..20 ..50 ..100 This can be done relatively easily eg (untested) for ($count=1;$count<=$pages;$count++) { // loop thru //set modifier for page display if ($count < 10)$iMod = 1; elseif ($count <50) $iMod = 5; else $iMod=50; if ($count % $iMod==0) //Are we on an exact iMod boundary? print "$i \n"; } -Original Message- From: Adrian D'Costa [mailto:[EMAIL PROTECTED]] Sent: September 14, 2001 5:57 PM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED]; php general list Subject: RE: [PHP] limiting rows and pages like google Hi, Thanks. Instead of using next and previous I am giving the page number at the bottom of the page (see lastminute.vvmm.net/nextweek.php). The problem is that if there are, say 35 pages, the page numbers go off the screen. This is the snippet: if ($nopage>=$limit) { echo (" Pagina"); for($j=1; $j<=($nopage); $j++) { //$next = $limit*($j-1); $xi = ($j-1); echo("[$page[$j]] "); } echo(" "); } Adrian On Thu, 13 Sep 2001 [EMAIL PROTECTED] wrote: > 2 queries is ok imho, but let the database do all the work ;) > > The first query should be a select count (*) QUERY for a count. > The second query should be the actual QUERY. > > Eg something cut 'n' pasted from some code of mine (not nice, but hey ;) ) > > -- > > $db = mysql_connect($db_domain, $db_user,$db_password); > mysql_select_db($db_databasename,$db); > > $sqlwhere = " where CuisineID = $CuisineID "; > > $numresults=mysql_query( "select count(*) from restaurants" . $sqlwhere); > $numrows=mysql_num_rows($numresults); > > // get results > $sqlstring= "select ID, Name,LanguageID from restaurants ". $sqlwhere . > "limit $offset,$limit"; > $result=@mysql_query($sqlstring,$db); > > //Do stuff with $result... > > // calculate number of pages needing links > $pages=intval($numrows/$limit); > > // $pages now contains int of pages needed unless there is a remainder from > division > if ($numrows%$limit) { > // has remainder so add one page > $pages++; > } > > for ($i=1;$i<=$pages;$i++) { // loop thru > $newoffset=$limit*($i-1); > print "$i \n"; > } > > // check to see if last page > if (!(($offset/$limit)==$pages) && $pages!=1) { > // not last page so give NEXT link > $newoffset=$offset+$limit; > print "NEXT\n"; > } > > -Original Message- > From: Julian Wood [mailto:[EMAIL PROTECTED]] > Sent: September 14, 2001 1:34 AM > To: php general list > Subject: Re: [PHP] limiting rows and pages like google > > > > It's not too hard to do the next/previous through all your results, as > has been shown by several people. What is a little trickier, at least > when using mysql and trying to take advantage of the limit clause, is > how to display how many results you have (ie 1 to 10 of 107 results). If > you use the limit, you can't get the total number of rows, without doing > a second search sans limit. It's also harder to do the next link, > because you don't necessarily know if there are any more rows (imagine > you are displaying 10 rows at a time, you are on page 3 and there are 30 > total rows). Conversely, if you do a single query without the limit, > then you're doing a slower search (limiting a search is way faster), and > I'm not sure of the implications of the full result set residing > serverside - maybe higher memory requirements. So what do people do to > take advantage of limit? Two queries or a single query? Any other > solutions? Any more insights on how limit works? > > Julian > > On Wednesday, September 12, 2001, at 10:16 PM, Adrian D'Costa wrote: > > > > > Hi, > > > > I am trying to find out the the best way to do the following: > > > > I have a script that select records from a table. The problem is that I > > need to limit the rows to 20. I know that I can use limit 20. But > > what I > > want to do is give the view a
RE: [PHP] limiting rows and pages like google
Hi, Thanks. Instead of using next and previous I am giving the page number at the bottom of the page (see lastminute.vvmm.net/nextweek.php). The problem is that if there are, say 35 pages, the page numbers go off the screen. This is the snippet: if ($nopage>=$limit) { echo (" Pagina"); for($j=1; $j<=($nopage); $j++) { //$next = $limit*($j-1); $xi = ($j-1); echo("[$page[$j]] "); } echo(" "); } Adrian On Thu, 13 Sep 2001 [EMAIL PROTECTED] wrote: > 2 queries is ok imho, but let the database do all the work ;) > > The first query should be a select count (*) QUERY for a count. > The second query should be the actual QUERY. > > Eg something cut 'n' pasted from some code of mine (not nice, but hey ;) ) > > -- > > $db = mysql_connect($db_domain, $db_user,$db_password); > mysql_select_db($db_databasename,$db); > > $sqlwhere = " where CuisineID = $CuisineID "; > > $numresults=mysql_query( "select count(*) from restaurants" . $sqlwhere); > $numrows=mysql_num_rows($numresults); > > // get results > $sqlstring= "select ID, Name,LanguageID from restaurants ". $sqlwhere . > "limit $offset,$limit"; > $result=@mysql_query($sqlstring,$db); > > //Do stuff with $result... > > // calculate number of pages needing links > $pages=intval($numrows/$limit); > > // $pages now contains int of pages needed unless there is a remainder from > division > if ($numrows%$limit) { > // has remainder so add one page > $pages++; > } > > for ($i=1;$i<=$pages;$i++) { // loop thru > $newoffset=$limit*($i-1); > print "$i \n"; > } > > // check to see if last page > if (!(($offset/$limit)==$pages) && $pages!=1) { > // not last page so give NEXT link > $newoffset=$offset+$limit; > print "NEXT\n"; > } > > -Original Message- > From: Julian Wood [mailto:[EMAIL PROTECTED]] > Sent: September 14, 2001 1:34 AM > To: php general list > Subject: Re: [PHP] limiting rows and pages like google > > > > It's not too hard to do the next/previous through all your results, as > has been shown by several people. What is a little trickier, at least > when using mysql and trying to take advantage of the limit clause, is > how to display how many results you have (ie 1 to 10 of 107 results). If > you use the limit, you can't get the total number of rows, without doing > a second search sans limit. It's also harder to do the next link, > because you don't necessarily know if there are any more rows (imagine > you are displaying 10 rows at a time, you are on page 3 and there are 30 > total rows). Conversely, if you do a single query without the limit, > then you're doing a slower search (limiting a search is way faster), and > I'm not sure of the implications of the full result set residing > serverside - maybe higher memory requirements. So what do people do to > take advantage of limit? Two queries or a single query? Any other > solutions? Any more insights on how limit works? > > Julian > > On Wednesday, September 12, 2001, at 10:16 PM, Adrian D'Costa wrote: > > > > > Hi, > > > > I am trying to find out the the best way to do the following: > > > > I have a script that select records from a table. The problem is that I > > need to limit the rows to 20. I know that I can use limit 20. But > > what I > > want to do is give the view a link to the next 20 till all the records > > are > > shown. What I don't know is how to maintain the search query and I want > > to use the same script. > > > > The logic would be to check if the script is called the first time, then > > the sql statement would be select travel.*, city.city from travel, city > > where travel.cityid=city.id limit 0,20. > > The second time or based on what has been selected on the page (1-20, > > 21-40, etc) add that to the sql statement. My question is how? > > > > Can someone guide me or give me some example. > > > > TIA > > > > Adrian > > > > > > -- > > PHP General Mailing List (http://www.php.net/) > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > To contact the list administrators, e-mail: [EMAIL PROTECTED] > > > > -- > Julian Wood > > Programmer/Analyst > University of Calgary > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
RE: [PHP] limiting rows and pages like google
2 queries is ok imho, but let the database do all the work ;) The first query should be a select count (*) QUERY for a count. The second query should be the actual QUERY. Eg something cut 'n' pasted from some code of mine (not nice, but hey ;) ) -- $db = mysql_connect($db_domain, $db_user,$db_password); mysql_select_db($db_databasename,$db); $sqlwhere = " where CuisineID = $CuisineID "; $numresults=mysql_query( "select count(*) from restaurants" . $sqlwhere); $numrows=mysql_num_rows($numresults); // get results $sqlstring= "select ID, Name,LanguageID from restaurants ". $sqlwhere . "limit $offset,$limit"; $result=@mysql_query($sqlstring,$db); //Do stuff with $result... // calculate number of pages needing links $pages=intval($numrows/$limit); // $pages now contains int of pages needed unless there is a remainder from division if ($numrows%$limit) { // has remainder so add one page $pages++; } for ($i=1;$i<=$pages;$i++) { // loop thru $newoffset=$limit*($i-1); print "$i \n"; } // check to see if last page if (!(($offset/$limit)==$pages) && $pages!=1) { // not last page so give NEXT link $newoffset=$offset+$limit; print "NEXT\n"; } -Original Message- From: Julian Wood [mailto:[EMAIL PROTECTED]] Sent: September 14, 2001 1:34 AM To: php general list Subject: Re: [PHP] limiting rows and pages like google It's not too hard to do the next/previous through all your results, as has been shown by several people. What is a little trickier, at least when using mysql and trying to take advantage of the limit clause, is how to display how many results you have (ie 1 to 10 of 107 results). If you use the limit, you can't get the total number of rows, without doing a second search sans limit. It's also harder to do the next link, because you don't necessarily know if there are any more rows (imagine you are displaying 10 rows at a time, you are on page 3 and there are 30 total rows). Conversely, if you do a single query without the limit, then you're doing a slower search (limiting a search is way faster), and I'm not sure of the implications of the full result set residing serverside - maybe higher memory requirements. So what do people do to take advantage of limit? Two queries or a single query? Any other solutions? Any more insights on how limit works? Julian On Wednesday, September 12, 2001, at 10:16 PM, Adrian D'Costa wrote: > > Hi, > > I am trying to find out the the best way to do the following: > > I have a script that select records from a table. The problem is that I > need to limit the rows to 20. I know that I can use limit 20. But > what I > want to do is give the view a link to the next 20 till all the records > are > shown. What I don't know is how to maintain the search query and I want > to use the same script. > > The logic would be to check if the script is called the first time, then > the sql statement would be select travel.*, city.city from travel, city > where travel.cityid=city.id limit 0,20. > The second time or based on what has been selected on the page (1-20, > 21-40, etc) add that to the sql statement. My question is how? > > Can someone guide me or give me some example. > > TIA > > Adrian > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > To contact the list administrators, e-mail: [EMAIL PROTECTED] > -- Julian Wood Programmer/Analyst University of Calgary -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED] -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] limiting rows and pages like google
It's not too hard to do the next/previous through all your results, as has been shown by several people. What is a little trickier, at least when using mysql and trying to take advantage of the limit clause, is how to display how many results you have (ie 1 to 10 of 107 results). If you use the limit, you can't get the total number of rows, without doing a second search sans limit. It's also harder to do the next link, because you don't necessarily know if there are any more rows (imagine you are displaying 10 rows at a time, you are on page 3 and there are 30 total rows). Conversely, if you do a single query without the limit, then you're doing a slower search (limiting a search is way faster), and I'm not sure of the implications of the full result set residing serverside - maybe higher memory requirements. So what do people do to take advantage of limit? Two queries or a single query? Any other solutions? Any more insights on how limit works? Julian On Wednesday, September 12, 2001, at 10:16 PM, Adrian D'Costa wrote: > > Hi, > > I am trying to find out the the best way to do the following: > > I have a script that select records from a table. The problem is that I > need to limit the rows to 20. I know that I can use limit 20. But > what I > want to do is give the view a link to the next 20 till all the records > are > shown. What I don't know is how to maintain the search query and I want > to use the same script. > > The logic would be to check if the script is called the first time, then > the sql statement would be select travel.*, city.city from travel, city > where travel.cityid=city.id limit 0,20. > The second time or based on what has been selected on the page (1-20, > 21-40, etc) add that to the sql statement. My question is how? > > Can someone guide me or give me some example. > > TIA > > Adrian > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > To contact the list administrators, e-mail: [EMAIL PROTECTED] > -- Julian Wood Programmer/Analyst University of Calgary -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] limiting rows and pages like google -- again
> > Do you want to list all the pages of posts or just a link to the next 20 > > items? > > On the first page, 20 and links to the other items that when selected will > display the list based on the selection. > > One thing to remember is that the ids will not be in squence. Here's a function I wrote to do that. I can't promise that it isn't still buggy, but it's been working on my forum for a while now. /*/ /* print nextLinks * Prints a list of "next page" links for a list of items * spanning more than one page. * The links look something like this: * Page 1 | 2 | 3 * It cycles through the array of IDs supplied by the user * and prints one every "itemsPerPage" interval * param idArray - an array of all the id numbers of the thing that the menu relates to * param pageURL - the actual url for the pages that are linked * param itemsPerPage - the number of items per page * param currentID - the ID of the last item on the current page */ function printNextLinks($idArray, $pageURL, $itemsPerPage, $currentID, $direction) { // variables $postCount = count($idArray); $postPlace = 0; $iteration = 1; $threadLinks = ""; $lastID = $idArray[$postCount - 1]; $firstNextPage = $idArray[0]; // we only want the pages link if there is more than one page if ($postCount > $itemsPerPage && $firstNextPage != '') { while($postPlace <= $postCount && $firstNextPage != '') { $thisID = $idArray[$postPlace]; $nextPlace = $postPlace + $itemsPerPage; $lastCurrentPage = $idArray[$nextPlace - 1]; $firstNextPage = $idArray[$nextPlace]; if($lastCurrentPage == "") { $lastCurrentPage = $thisID; } // end if if(($currentID == $lastCurrentPage) && ($thisID != '') && $direction == "desc") { $threadLinks .= " $iteration |"; } else if (($currentID == $lastID) && ($firstNextPage == '') && $direction == "desc") { $threadLinks .= " $iteration |"; } else if (($currentID == $lastCurrentPage) && ($thisID != '')) { $threadLinks .= " $iteration |"; } else if (($currentID == $lastID) && ($firstNextPage == '')) { $threadLinks .= " $iteration |"; } else { $threadLinks .= " $iteration |"; } // end else // move everything along $postPlace = $nextPlace; $iteration ++; } // end while // remove the last line from the threadlinks $threadLinks = subStr($threadLinks, 0, -1); echo " $threadLinks | "; } // end if } // end function Helen -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] limiting rows and pages like google -- again
On Thu, 13 Sep 2001, Helen wrote: > > The logic would be to check if the script is called the first time, then > > the sql statement would be select travel.*, city.city from travel, city > > where travel.cityid=city.id limit 0,20. > > The second time or based on what has been selected on the page (1-20, > > 21-40, etc) add that to the sql statement. My question is how > > Do you want to list all the pages of posts or just a link to the next 20 > items? On the first page, 20 and links to the other items that when selected will display the list based on the selection. One thing to remember is that the ids will not be in squence. Thanks Adrian -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] limiting rows and pages like google -- again
On Thu, 13 Sep 2001 14:55, Adrian D'Costa wrote: > Hi, > > I am trying to find out the the best way to do the following: > > I have a script that select records from a table. The problem is that > I need to limit the rows to 20. I know that I can use limit 20. But > what I want to do is give the view a link to the next 20 till all the > records are shown. What I don't know is how to maintain the search > query and I want to use the same script. > > The logic would be to check if the script is called the first time, > then the sql statement would be select travel.*, city.city from travel, > city where travel.cityid=city.id limit 0,20. > The second time or based on what has been selected on the page (1-20, > 21-40, etc) add that to the sql statement. My question is how? > > Can someone guide me or give me some example. > > TIA > > Adrian This has been a common topic recently. Try the archives http://marc.theaimsgroup.com/?l=php-general&r=1&w=2&q=b&s=pages+like+google -- David Robley Techno-JoaT, Web Maintainer, Mail List Admin, etc CENTRE FOR INJURY STUDIES Flinders University, SOUTH AUSTRALIA Useless Invention: Flashbulb tester. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] limiting rows and pages like google -- again
> The logic would be to check if the script is called the first time, then > the sql statement would be select travel.*, city.city from travel, city > where travel.cityid=city.id limit 0,20. > The second time or based on what has been selected on the page (1-20, > 21-40, etc) add that to the sql statement. My question is how Do you want to list all the pages of posts or just a link to the next 20 items? Helne -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]