php操作MSSQL 无限级分类+分页详细实例
2012-11-10 21:14
731 查看
运行环境:PHP5.3 + apache2.2 + mssql 2005 ,为什么要用mssql不用,mysql呢, 因为这里在一个平台上做开发,用友数据整合。。。mysql与mssql语句还是有差别的,至少mssql没有limit。。。
这个是必须的,开启一个需要一个ntwdblib.dll链接文件,版本还不能太低,其他的自己百度吧,嘿嘿
无限级分类,我只做了一个排序,添加就非常简单了,我也没有做什么递归函数,添加的时候把,Id,e本文来自我的个人网站:http://www.51net.co/本文出自 “爱好者--都市网达” 博客,请务必保留此出处http://lmzj26.blog.51cto.com/1081403/1056773
这个是必须的,开启一个需要一个ntwdblib.dll链接文件,版本还不能太低,其他的自己百度吧,嘿嘿
CREATE TABLE [dbo].[tb_ProType]( [jb_Id] [int] IDENTITY(1,1) NOT NULL, [jb_TypeName] [varchar](150) NULL, [jb_TypePid] [int] NULL, [jb_Path] [varchar](128) NULL, [jb_State] [int] NULL CONSTRAINT [DF_tb_ProType_jb_State] DEFAULT ((6)), [jb_CreateTime] [datetime] NULL, [jb_Order] [int] NULL, CONSTRAINT [PK_tb_ProType] PRIMARY KEY CLUSTERED ( [jb_Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(124,'数码产品',0,'0,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(125,'手机','124','0,124,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(126,'笔记本电脑',124,'0,124,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(127,'联想',126,0,124,126,); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(129,'HP',126,'0,124,126,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(134,'G460',127,'0,124,126,127,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(133,'书类',0,'0,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(128,'企业类',0,'0,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(132,'相机',124,'0,124,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(130,'联想1',127,'0,124,126,127,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(131,'联想3',129,'0,124,126,127,129,'); INSERT INTO [demo].[dbo].[tb_ProType]([jb_Id],[jb_TypeName],[jb_TypePid],[jb_Path])VALUES(135,'计算机书',130,'0,130,');
<?php //设置GBK编码 header('Content-Type:text/html;charset=GBK'); //这个是编码,用mysql一般是utf-8,但是这mssql,我就用gbk //网站根目录 define('ROOT_PATH',dirname(__FILE__)); //返回当前的绝对路径 //这是我当前的C:\wamp\www\demo,所有的文件都存放在www,下的demo文件中 define('Host', '127.0.0.1,1433'); //sql的地址与端口,中间为“,”分开,不是":" define('Name', 'sa'); //mssql 的用户名 define('Pass', '123456'); //这个是mssql 密码 define('DataName', 'demo'); //这个是数据文件名 //设置中国时区 date_default_timezone_set('Asia/Shanghai'); //地区时间 //地区时间设置 @spl_autoload_register('__autoload'); //当__autoload无法加载时,就执行上面的 function __autoload($_className){ //自动引入类 if(file_exists(ROOT_PATH.'/class/'.$_className.'.class.php')){ //系统会在new Mssql时,自动加载这个文件,首先判断一个这个文件是否存在 //如果存在就引入这个类 require_once ROOT_PATH.'/class/'.$_className.'.class.php'; }else{ //如果没有,就是加载错误,不允许向下执行 exit($_className.'.class.php类不存在'); } } /* * * 类型管理,分页列表 * 提供两个类,class/mssql.class.php 这是mssql操作类,我从网上下载的,修改了一下 * class/page.class.php 这是分页类,也是网上下载的,可以用在mysql中,一样的,不需要 * 更改,还可以放在模板里smarty * $_page = $_pages->ShowLink(); * 如:$smarty->assign("page",$_page); <{$page}> * 就是这么的简单,这是从模板中整理出来的 * */ $_mssql = new Mssql(Host,Name,Pass,DataName); //new 这个mssql类,当然在class这个文件夹下面要有一个mssql.class.php的文件 @$GetPage = $_GET['page'] ? $_GET['page'] : 1; //如果传过来的index.php?page=1 有值的话就等于传过来的值,没有就等于1 //就是没有就是第一页 $_pages = new Page(); //new一下这个分页类,这个分页类与什么数据库没有关系的 $_pages->PageSize = 12;//每页条数 /* * $_pages->PageSize是显示多少记录 * $GetPage是第几页 * 这里mysql里面的不一样,mysql利用了limit,就非常简单了,一看就懂了 * 这里做了一个子查询,与 not in() * * */ $_sql = "select top {$_pages->PageSize} * from tb_ProType where jb_Id not in ( select top ({$_pages->PageSize}*($GetPage-1)) jb_Id from tb_ProType ) order by REPLACE(REPLACE(REPLACE(jb_Path,'0,','1'),',','')+str(jb_id),' ','') "; //查询“资产信息表”中的所有数据 $Result= $_mssql->execQuery($_sql); //$Row=$_mssql->getTotalRowNum($Result);//总条数 $ResRows = $_mssql->execQuery('select jb_Id from tb_ProType'); //查询tb_ProInfo表的总条数; $Rows = $_mssql->getTotalRowNum($ResRows); //返回查询到的行数,当前这里可以做一个判断,如果返回空的或小于0,就可以代表没有数据 $_pages->Total = $Rows; //总条数 $_mssql->freeResult($ResRows); //销毁查询总条数这个集合 $_page = $_pages->ShowLink(); //这样就可以显示分页链接了,就可以直接使用 ECHO 输出了 echo '<table align="center" border="1" width="800">'; while(!!$rs = $_mssql->_fetch_array($Result)){ $m = substr_count($rs['jb_Path'],",")-1; $strs = str_pad("",$m*6*2," "); echo '<tr>'; echo '<td>'.$rs["jb_Id"].'</td>'; echo '<td>'.$strs.$rs["jb_TypeName"].'</td>'; if($rs["jb_TypePid"]=='0'){ echo '<td>顶级类别</td>'; }else{ echo '<td>'.$rs["jb_TypePid"].'</td>'; } echo '<td>'.$rs["jb_Path"].'</td>'; echo '</tr>'; } echo '<tr><td colspan="5" height="40">'.$_page.'</td></tr>'; echo '</table>'; $_mssql->freeResult($Result);//销毁查询总条数这个集合 unset($_page);//销毁这个变量 unset($_pages); //销毁这个变量 $_mssql->_close(); /* * 分页就结束了 * */ ?>
无限级分类,我只做了一个排序,添加就非常简单了,我也没有做什么递归函数,添加的时候把,Id,e本文来自我的个人网站:http://www.51net.co/本文出自 “爱好者--都市网达” 博客,请务必保留此出处http://lmzj26.blog.51cto.com/1081403/1056773
相关文章推荐
- php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
- jquery ajax php+mysql 无刷新分页 详细实例
- 这么详细的分类 PHP源代码网站你见过没有? PHP中的每一个方法,每一个操作,每一个头文件,每一个函数,每一个类.每一个属性,每一个事件都有相应的范例代码
- 2款PHP无限级分类实例代码
- PHP MSSQL 分页实例
- PHP MSSQL 分页实例(刷新)
- php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
- PHP数组循环操作详细介绍 附实例代码
- PHP数组循环操作详细介绍 附实例代码
- PHP MSSQL 分页实例
- 2款PHP无限级分类实例代码
- PHP分页详细讲解(有实例)
- PHP简易表单验证与简易留言板实例扩展-V1.0(实现分页操作)
- PHP分页详细讲解(有实例)
- PHP分页详细讲解(有实例)
- PHP+Mysql+jQuery查询和列表框选择操作实例讲解
- 这么详细的分类 VB/VB.NET源代码网站你见过没有? VB/VB.NET中的每一个方法,每一个操作,每一个函数,每一个类.每一个属性,每一个事件都有相应的范例代码
- PHP-FPM自启动脚本编写与详细操作说明
- 如何在DataGrid控件中实现编辑、删除、分类以及分页操作
- PHP无限级分类排序输出以及分级缩进思路以及解决方案[修正]