运行环境:PHP5.3 + apache2.2 + mssql 2005 ,为什么要用mssql不用,mysql呢, 因为这里在一个平台上做开发,用友数据整合。。。mysql与mssql语句还是有差别的,至少mssql没有limit。。。
这个是必须的,开启一个需要一个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/