您好,欢迎访问一九零五行业门户网

比较简单实用的PHP无限分类源码分享(思路不错)_PHP

下面一段代码是创建相应数据库的sql代码:
复制代码 代码如下:
 //////////////
   //////无限分类的数据库设计及样例
   //////////////
   mysql> create database db_kind;
   query ok, 1 row affected
mysql> use db_kind;
   database changed
   mysql> create table tb_kind(
     -> id int not null auto_increment primary key,
     -> pid int,
     -> path varchar(200)
     -> );
 query ok, 0 rows affected
mysql> insert into tb_kind values(null,新闻,0,0);
 query ok, 1 row affected
mysql> insert into tb_kind values(null,视频,0,0);
 query ok, 1 row affected
mysql> insert into tb_kind values(null,图片,0,0);
 query ok, 1 row affected
mysql> insert into tb_kind values(null,博客,0,0);
 query ok, 1 row affected
mysql> insert into tb_kind values(null,体育新闻,1,0-1);
 query ok, 1 row affected
mysql> insert into tb_kind values(null,娱乐新闻,1,0-1);
 query ok, 1 row affected
mysql> insert into tb_kind values(null,财经新闻,1,0-1);
 query ok, 1 row affected
mysql> select * from db_kind;
 error 1146 : table 'db_kind.db_kind' doesnot exist
 mysql> select * from tb
 _kind;
 +----+----------+-----+------+
 | id | pname    | pid | path |
 +----+----------+-----+------+
 |  1 | 新闻     |   0 | 0    |
 |  2 | 视频     |   0 | 0    |
 |  3 | 图片     |   0 | 0    |
 |  4 | 博客     |   0 | 0    |
 |  5 | 体育新闻 |   1 | 0-1  |
 |  6 | 娱乐新闻 |   1 | 0-1  |
 |  7 | 财经新闻 |   1 | 0-1  |
 +----+----------+-----+------+
 7 rows in set
 mysql> insert into tb_kind values(null,篮球新闻,5,0-1-5);
 query ok, 1 row affected
mysql> insert into tb_kind values(null,足球新闻,5,0-1-5);
 query ok, 1 row affected
mysql> select * from tb_kind;
 +----+----------+-----+-------+
 | id | pname    | pid | path  |
 +----+----------+-----+-------+
 |  1 | 新闻     |   0 | 0     |
 |  2 | 视频     |   0 | 0     |
 |  3 | 图片     |   0 | 0     |
 |  4 | 博客     |   0 | 0     |
 |  5 | 体育新闻 |   1 | 0-1   |
 |  6 | 娱乐新闻 |   1 | 0-1   |
 |  7 | 财经新闻 |   1 | 0-1   |
 |  8 | 篮球新闻 |   5 | 0-1-5 |
 |  9 | 足球新闻 |   5 | 0-1-5 |
 +----+----------+-----+-------+
 9 rows in set
mysql> insert into tb_kind values(null,nba,8,0-1-5-8);
 query ok, 1 row affected
mysql> insert into tb_kind values(null,cba,8,0-1-5-8);
 query ok, 1 row affected
mysql> select * from tb_kind;
 +----+----------+-----+---------+
 | id | pname    | pid | path    |
 +----+----------+-----+---------+
 |  1 | 新闻     |   0 | 0       |
 |  2 | 视频     |   0 | 0       |
 |  3 | 图片     |   0 | 0       |
 |  4 | 博客     |   0 | 0       |
 |  5 | 体育新闻 |   1 | 0-1     |
 |  6 | 娱乐新闻 |   1 | 0-1     |
 |  7 | 财经新闻 |   1 | 0-1     |
 |  8 | 篮球新闻 |   5 | 0-1-5   |
 |  9 | 足球新闻 |   5 | 0-1-5   |
 | 10 | nba      |   8 | 0-1-5-8 |
 | 11 | cba      |   8 | 0-1-5-8 |
 +----+----------+-----+---------+
 11 rows in set
mysql> select concat(path,-,id) from tb_kind;
 +---------------------+
 | concat(path,-,id) |
 +---------------------+
 | 0-1                 |
 | 0-2                 |
 | 0-3                 |
 | 0-4                 |
 | 0-1-5               |
 | 0-1-6               |
 | 0-1-7               |
 | 0-1-5-8             |
 | 0-1-5-9             |
 | 0-1-5-8-10          |
 | 0-1-5-8-11          |
 +---------------------+
 11 rows in set
mysql> select concat(path,-,id) from tb_kind;
 +---------------------+
 | concat(path,-,id) |
 +---------------------+
 | 0-1                 |
 | 0-2                 |
 | 0-3                 |
 | 0-4                 |
 | 0-1-5               |
 | 0-1-6               |
 | 0-1-7               |
 | 0-1-5-8             |
 | 0-1-5-9             |
 | 0-1-5-8-10          |
 | 0-1-5-8-11          |
 +---------------------+
 11 rows in set
mysql> select concat(path,-,id) as abs from tb_kind order by abs.path;
 error 1054 : unknown column 'abs.path' in 'order clause'
 mysql> select concat(path,-,id) as abs from tb_kind order by abs
+------------+
 | abs        |
 +------------+
 | 0-1        |
 | 0-1-5      |
 | 0-1-5-8    |
 | 0-1-5-8-10 |
 | 0-1-5-8-11 |
 | 0-1-5-9    |
 | 0-1-6      |
 | 0-1-7      |
 | 0-2        |
 | 0-3        |
 | 0-4        |
 +------------+
 11 rows in set
 mysql> select concat(path,-,id) as,id,name,path abs from tb_kind order by abs;
 error 1064 : you have an error in your sql syntax; check the manual that corresponds to your mysql server version for the right syntax to use near 'id,name,path abs from tb_kind order by abs' at line 1
 mysql> select concat(path,-,id) as abs,
 id,pname,path abs from tb_kind order by abs;
 +------------+----+----------+---------+
 | abs        | id | pname    | abs     |
 +------------+----+----------+---------+
 | 0-1        |  1 | 新闻     | 0       |
 | 0-1-5      |  5 | 体育新闻 | 0-1     |
 | 0-1-5-8    |  8 | 篮球新闻 | 0-1-5   |
 | 0-1-5-8-10 | 10 | nba      | 0-1-5-8 |
 | 0-1-5-8-11 | 11 | cba      | 0-1-5-8 |
 | 0-1-5-9    |  9 | 足球新闻 | 0-1-5   |
 | 0-1-6      |  6 | 娱乐新闻 | 0-1     |
 | 0-1-7      |  7 | 财经新闻 | 0-1     |
 | 0-2        |  2 | 视频     | 0       |
 | 0-3        |  3 | 图片     | 0       |
 | 0-4        |  4 | 博客     | 0       |
 +------------+----+----------+---------+
 11 rows in set
 mysql>
下面是php源文件:
复制代码 代码如下:
无标题文档
$conn=mysql_connect(localhost,root,root);
mysql_select_db(db_kind);
mysql_query(set names utf8);
$sql=select concat(path,'-',id) as abspath,id,pname,path from tb_kind order by abspath;
$rs=mysql_query($sql);
while($result=mysql_fetch_assoc($rs)){
$num=count(explode(-,$result[path]))-1;
$new_str=str_repeat(---,$num);
echo $new_str.$result[pname];
echo
;
}
$str=str_repeat(=,10);
echo $str;
$num=count(explode(-,0-1-5-8))-1;
echo $num;
?>
上面的代码中其实中间有空格的输入效果还是非常不错的,请大家本地测试。因编辑器问题导致排版混乱。
其它类似信息

推荐信息