现在的位置: 首页 > 综合 > 正文

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

2013年10月03日 ⁄ 综合 ⁄ 共 4145字 ⁄ 字号 评论关闭

下面一段代码是创建相应数据库的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源文件: 

复制代码代码如下:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<title>无标题文档</title> 

</head> 

<body> 

<!--显示结果 

新闻 

体育新闻 

篮球新闻 

NBA 

CBA 

足球新闻 

娱乐新闻 

财经新闻 

视频 

图片 

博客 

--> 

<? 

$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 "<br>"; 



$str=str_repeat("=",10); 

echo $str; 

$num=count(explode("-","0-1-5-8"))-1; 

echo $num; 

?> 

</body> 

</html> 

抱歉!评论已关闭.