<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>华斐Blog &#187; 分页原理</title>
	<atom:link href="http://www.huafei117.com/tag/%e5%88%86%e9%a1%b5%e5%8e%9f%e7%90%86/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.huafei117.com</link>
	<description>华斐网志以及学习心得</description>
	<lastBuildDate>Wed, 28 Dec 2011 02:36:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PHP分页原理</title>
		<link>http://www.huafei117.com/2010/03/22/php%e5%88%86%e9%a1%b5%e5%8e%9f%e7%90%86/</link>
		<comments>http://www.huafei117.com/2010/03/22/php%e5%88%86%e9%a1%b5%e5%8e%9f%e7%90%86/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 14:05:56 +0000</pubDate>
		<dc:creator>华斐</dc:creator>
				<category><![CDATA[PHP&MYSQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[分页原理]]></category>

		<guid isPermaLink="false">http://www.huafei117.com/149.htm</guid>
		<description><![CDATA[作为一个Web程序，经常要和不计其数的数据打交道，比如会员的数据，文章数据，假如只有几十个会员那很好办，在一页显示就可以了，可是假如你的网站是几千甚至几十万会员的话，如果都在一页打开的话无论对浏览器还是观看者都是一种折磨。 相信每个学习PHP的新手都会对分页这个东西感觉很头疼，不过有了默默的这一水帖，你肯定会拍拍脑袋说，嘿，原来分页竟然如此简单？的确，现在请深呼吸一口新鲜的空气，仔细的听默默给你一点一点的分解。 假设我们要处理1000条数据，要在每页中显示10条，这样的话就会分100页来显示，咱们先看一看在mysql里提取10条信息是如何操作的。 Select * from table limit 0,10 上面是一句很简单的mysql查询语句，它的作用是从一个名叫table的表里提取10条数据，并且把所有字段的值都获得。 关键的地方就在这段“limit 0,10”，它其中的0是以0为起始点，后面的10则是显示10条数据，那么我们要以10为起始点，显示到第20条数据该怎么写呢？ 可能很多大大会心直口快的说“limit 10,20”嘛！啊哦，这样可就错误了哦，正确的写法是“limit 10,10”它后面的参数并非是结束点而是要提取的数目，记住哦。 懂得了如何提取10条数据，那么提取1000条也就是做100次这种查询呀，就是说要做如下的查询： Limit 0,10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //第一页 Limit 10,10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //第二页 Limit 20,10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //第三页 Limit 30,10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //第四页 …… 看出有什么规律了吗？没错，第一个参数每翻一页就增加10，可是第二个参数是不变的。 也就是说咱们设法根据页数来改变第一个参数的值，就可以进行分页显示数据了，怎么样，原理是不是很简单？ 可是要怎么设法根据页数来改变第一个参数的值呢？首先，咱们要有一个页数的值，用url的GET方式获取。 比如index.php?page=18 相信大部分的大大对这个东西不陌生吧，这种url地址可是随处可见，其中的page参数的作用就是传入要显示的页数。 咱们通过一段代码来看一看究竟是如何实现的吧： &#60;?php $page=isset($_GET['page'])?intval($_GET['page']):1;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //这句就是获取page=18中的page的值，假如不存在page，那么页数就是1。 $num=10;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //每页显示10条数据 $db=mysql_connect(&#34;host&#34;,&#34;name&#34;,&#34;pass&#34;);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //创建数据库连接 $select=mysql_select_db(&#34;db&#34;,$db);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //选择要操作的数据库 /* 首先咱们要获取数据库中到底有多少数据，才能判断具体要分多少页，具体的公式就是 总数据数除以每页显示的条数，有余进一。 也就是说10/3=3.3333=4 有余数就要进一。 */ $total=mysql_num_rows(mysql_query(&#34;select * from table&#34;)); //查询数据的总数 [...]]]></description>
			<content:encoded><![CDATA[<p>作为一个Web程序，经常要和不计其数的数据打交道，比如会员的数据，文章数据，假如只有几十个会员那很好办，在一页显示就可以了，可是假如你的网站是几千甚至几十万会员的话，如果都在一页打开的话无论对浏览器还是观看者都是一种折磨。 </p>
<p>相信每个学习PHP的新手都会对分页这个东西感觉很头疼，不过有了默默的这一水帖，你肯定会拍拍脑袋说，嘿，原来分页竟然如此简单？的确，现在请深呼吸一口新鲜的空气，仔细的听默默给你一点一点的分解。 </p>
<p>假设我们要处理1000条数据，要在每页中显示10条，这样的话就会分100页来显示，咱们先看一看在mysql里提取10条信息是如何操作的。 </p>
<blockquote><p>Select * from table limit 0,10 </p>
</blockquote>
<p>上面是一句很简单的mysql查询语句，它的作用是从一个名叫table的表里提取10条数据，并且把所有字段的值都获得。 </p>
<p>关键的地方就在这段“limit 0,10”，它其中的0是以0为起始点，后面的10则是显示10条数据，那么我们要以10为起始点，显示到第20条数据该怎么写呢？ </p>
<p>可能很多大大会心直口快的说“limit 10,20”嘛！啊哦，这样可就错误了哦，正确的写法是“limit 10,10”它后面的参数并非是结束点而是要提取的数目，记住哦。 </p>
<p>懂得了如何提取10条数据，那么提取1000条也就是做100次这种查询呀，就是说要做如下的查询： </p>
<p>Limit 0,10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //第一页    <br />Limit 10,10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //第二页     <br />Limit 20,10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //第三页     <br />Limit 30,10&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //第四页     <br />……     <br />看出有什么规律了吗？没错，第一个参数每翻一页就增加10，可是第二个参数是不变的。     <br />也就是说咱们设法根据页数来改变第一个参数的值，就可以进行分页显示数据了，怎么样，原理是不是很简单？ </p>
<p>可是要怎么设法根据页数来改变第一个参数的值呢？首先，咱们要有一个页数的值，用url的GET方式获取。    <br />比如index.php?page=18     <br />相信大部分的大大对这个东西不陌生吧，这种url地址可是随处可见，其中的page参数的作用就是传入要显示的页数。 </p>
<p>咱们通过一段代码来看一看究竟是如何实现的吧：    <br />&lt;?php </p>
<p>$page=isset($_GET['page'])?intval($_GET['page']):1;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //这句就是获取page=18中的page的值，假如不存在page，那么页数就是1。    <br />$num=10;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //每页显示10条数据 </p>
<p>$db=mysql_connect(&quot;host&quot;,&quot;name&quot;,&quot;pass&quot;);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //创建数据库连接    <br />$select=mysql_select_db(&quot;db&quot;,$db);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //选择要操作的数据库 </p>
<p>/*    <br />首先咱们要获取数据库中到底有多少数据，才能判断具体要分多少页，具体的公式就是     <br />总数据数除以每页显示的条数，有余进一。     <br />也就是说10/3=3.3333=4 有余数就要进一。     <br />*/ </p>
<p>$total=mysql_num_rows(mysql_query(&quot;select * from table&quot;)); //查询数据的总数    <br />$pagenum=ceil($total/$num);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //获得总页数 </p>
<p>//假如传入的页数参数大于总页数，则显示错误信息    <br />If($page&gt;$pagenum || $page == 0){&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; echo &quot;Error : Can Not Found The page .&quot;;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; exit;     <br />} </p>
<p>$offset=($page-1)*$num;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //获取limit的第一个参数的值，假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。 </p>
<p>$info=mysql_query(&quot;select * from table limit $offset,$num&quot;);&#160;&#160; //获取相应页数所需要显示的数据    <br />while($it=mysql_fetch_array($info)){&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; echo $it['name'].&quot;&lt;br /&gt;&quot;;     <br />}&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //显示数据     <br />for($i=1;$i&lt;=$pagenum;$i++){     <br />&#160;&#160;&#160;&#160;&#160;&#160; $show=($i!=$page)?&quot;&lt;a href=&#8217;index.php?page=&quot;.$i.&quot;&#8217;&gt;$i&lt;/a&gt;&quot;:&quot;&lt;b&gt;$i&lt;/b&gt;&quot;;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; echo $show.&quot;&amp;nbsp;&quot;;     <br />} </p>
<p>/*显示分页信息，假如是当页则显示粗体的数字，其余的页数则为超连接，假如当前为第三页则显示如下    <br />1 2 3 4 5 6     <br />*/     <br />?&gt;&#160; <br />假如你仔细的读过上面的代码，把数据库连接和查询的表替换成你的，那么就能看见它的执行效果哦。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huafei117.com/2010/03/22/php%e5%88%86%e9%a1%b5%e5%8e%9f%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

