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 "<a href=\"$PHP_SELF?offset=$count\">$i</a> \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 ("<center><table border=\"0\" width=\"100%\">
<tr>
<td><font face=\"Arial\" size=\"1\">Pagina</td>");
for($j=1; $j<=($nopage); $j++)
{
//$next = $limit*($j-1);
$xi = ($j-1);
echo("<td><font
face=\"Arial\" size=\"1\"><a
href=\"$PHP_SELF?npage=$xi\">[$page[$j]]</a></font>
</td>");
}
echo(" </tr>
</table></center>");
}
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 "<a href=\"$PHP_SELF?offset=$newoffset\">$i</a> \n";
> }
>
> // check to see if last page
> if (!(($offset/$limit)==$pages) && $pages!=1) {
> // not last page so give NEXT link
> $newoffset=$offset+$limit;
> print "<a href=\"$PHP_SELF?offset=$newoffset\">NEXT</a><p>\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]