效果:
CREATE TABLE `NewTable` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT ,
`pid` int(10) UNSIGNED ZEROFILL NOT NULL ,
`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`path` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
AUTO_INCREMENT=53
CHECKSUM=0
ROW_FORMAT=DYNAMIC
DELAY_KEY_WRITE=0
;
!DOCTYPE html>
html lang="en">
head>
meta charset="UTF-8">
title>Document/title>
/head>
body>
h1>四個(gè)字段的無限分類/h1>
form action="{:url('add')}" method="post">
請(qǐng)選擇上級(jí)分類:select name="pid">
option value="0">頂級(jí)分類/option>
{foreach $cates as $vo}
option value={$vo.id}>|{$vo.pre}{$vo.name}/option>
{/foreach}
/select>br/>
請(qǐng)?zhí)顚懛诸惖拿Q:input type="text" name="name"/>/br>
input type="submit" value="添加">
/form>
/body>
/html>
?php
namespace app\index\controller;
use think\Db;
use think\Controller;
use app\model\Category;
class Index extends Controller
{
public function index()
{
//添加分類的界面
//查詢所有的分類
$db=Db::name('categroy');
$data=$db->order('concat(path,"-",id)')->select();
#order('concat(path,"-",id)')自動(dòng)排序
foreach ($data as $cate) {
$prefix='';
$i=count(explode("-", $cate['path']));
for($n=0;$n=$i;$n++){
$prefix.="--";
}
$cate['pre']=$prefix;
}
$this->assign('cates',$data);
return $this->fetch();
}
public function add(){
$db=Db::name('categroy');
if($_POST['pid']==0){
$_POST['path']=0;
}else{
$_POST['path']=$db->where('id='.$_POST['pid'])->value('path')."-".$_POST['pid'];
}
$name=$_POST['name'];
if($db->insert($_POST)){
$this->success('添加成功');
}else{
$this->error('添加失敗');
}
#原理:4個(gè)字段
/*
ID PID NAME PATH
1 0 服裝 0-1
2 0 游戲 0-2
3 1 男裝 0-1-3
4 3 上衣 0-1-3-4
*/
}}
還有一個(gè)沒有寫完的遞歸無限分類
public function user(){
$db=Db::name('categroy1');
// $data=$db->getTree();
$opt=$db->getOption($data);
$this->assign('opt',$opt);
$this->assign('cates',$data);
return $this->fetch();
}
public function doAdd(){
//執(zhí)行添加數(shù)據(jù)
$db=Db::name('categroy1');
if($db->insert()){
$this->success('添加成功',url('index'));
}else{
$this->error('添加失敗',url('index'));
}
return $this->fetch();
}
Model
?php
class CategoryModel extends Model{
#通過上級(jí)分類的主鍵id號(hào)查詢子類
public function getTree($pid=0){
$data=$this->where('pid='.$pid)->select();
foreach($data as $cate){
#通過該分類的主鍵id查詢?cè)摲诸惖淖宇?
$cate['cates']=$this->getTree($cate['id']);
}
return $data;
}
#拼裝屬性結(jié)構(gòu)
#通過一個(gè)數(shù)組組裝option
public function getOption($data){
static $i=0;
for($n=0;$n=$i*2;$n++){
$prefix.="-";
}
foreach ($data as $cate) {
$opt.="option value='".$cate['id']."'>".$prefix.$cate['name']."/option>";
#判斷該分類下是否包含子類,如果有子類,將數(shù)組傳入接著拼裝
if(!empty($case['cates'])){
$i++;
$opt.=$this->getOption($case['cases']);
}else{
$i=0;
}
return $opt;
}
}
}
以上這篇在TP5數(shù)據(jù)庫中四個(gè)字段實(shí)現(xiàn)無限分類的示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
您可能感興趣的文章:- tp5(thinkPHP5)框架數(shù)據(jù)庫Db增刪改查常見操作總結(jié)
- tp5(thinkPHP5)框架實(shí)現(xiàn)多數(shù)據(jù)庫查詢的方法
- tp5(thinkPHP5)框架連接數(shù)據(jù)庫的方法示例
- tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法
- thinkPHP5實(shí)現(xiàn)的查詢數(shù)據(jù)庫并返回json數(shù)據(jù)實(shí)例
- thinkPHP5實(shí)現(xiàn)數(shù)據(jù)庫添加內(nèi)容的方法
- TP5框架實(shí)現(xiàn)的數(shù)據(jù)庫備份功能示例