实现了无限类的分类
开始时,数据库像以前一样构建了4个值,如下所示:
身份:PID:类ID |增量| xid:ID类名:|排名类别名称
后来人们认为读取和修改数据是不方便的,读取产品时特别不便,并更改了以下方案。
MySQL表中添加了一个新字段,当前数据库如下所示:
表w_faqclass:编号:增量PID:|类ID xid:ID类名:| |排名类别名称|等级:等级
定义 uff1a
第一级分类,PID为0,秩为
两级分类,PID为id的第一类分类,等级为一类ID。
三级分类,PID为id的两类分类,排序为id I/id类的第一类分类。
凡此种种,不一而足。
1。基本功能
*
递归地返回到顺序的不定级别分类数组。
如果您不想使用递归,您可以使用它来获取并稍后进行排序。我很懒。我不会那样写的。实际上,最好用推荐的方式。
数据表:数据表的名称为
美元开始startid:父类ID
wheretcolumns美元:父类的名称
xcolumns美元:排序的列的名称
$ X型:排序方式
returnarr美元:返回一个数组
* /
功能readclass($ DataTable,startid美元美元美元,xtype,returnarr){
分贝= DataTable美元美元;
SID = startid美元美元;
$ xtype = $ X型;
路returnarr美元美元=;
$。PID。为XID。$ X型。;
cresult = mysql_query美元($ SQL);
如果(mysql_num_rows($ cresult)> 0){
而(RS = mysql_fetch_array美元(美元cresult)){
lunum美元=计数(合路);
{ } {美元美元的路lunum 'id' } = $ RS { 'id' };
路lunum } { {美元美元'pid} = { } 'pid美元的RS;
路lunum } { {美元美元'rank} = { } 'rank美元的RS;
路lunum } { {美元美元'classname} = { } 'classname美元的RS;
路lunum } { {美元美元'xid} = { } 'xid美元的RS;
$路= ReadClass($ dB,$ RS { 'id' },xtype美元,美元的路);
}
}
返回$鲁;
}
*
查询表中的值,只返回一个值。
数据表:数据表的名称为
wherevalue美元:条件价值
selectcolumns美元:查询的列名
wherecolumns美元:有条件的列
* /
函数的SelectValue($ DataTable,wherevalue selectcolumns美元,美元,美元wherecolumns){
$select
结果= mysql_query美元($ SQL);
而(RS = mysql_fetch_array美元($结果)){
返回的RS { $ selectcolumns };
}
}
2。增加分类(直接在选择中选择)
< PHP
classarr美元= ReadClass('w_faqclass ','0','asc,阵列());
$米团=计数($ classarr);
;
主要分类;
为($我= 0;美元美元美元我<<米团;i++){
rankarr美元=分裂( /
ranknum美元=计数($ rankarr);
= $ ;
(J = 1;对美元美元美元,<< ranknum;j++){ / /格式化的子类
$ 只是所有;
}
回声T classarr美元。美元美元} { {我'classname}。;
}
>
保存操作时,需要判断是否主分类,何时主类,用秩值
查询父级的值,父级加上父类id值。
如果(PID)!= 0){
pidrank美元= SelectValue('w_faqclass,$ PID,'rank,'id');
等级=美元美元美元pidrank PID。;
其他{ }
=;
}
三.改性的分类
< PHP
*
请注意,由于修改了,在加载页面时,当前分类的所有值都已被读取,相应的值是:
* /
classarr美元= ReadClass('w_faqclass ','0','asc,阵列());
$米团=计数($ classarr);
;
主要分类;
为($我= 0;美元美元美元我<<米团;i++){
因为是修改的,所以目前的分类不能选择自己或自己下面的分类,添加一个等级值优势啊,呵呵,以前的单pid值这里有递归查询。
而IDS = = $(美元classarr { $我} { 'id' } strstr($ classarr { } { }我'rank美元的美元美元,排名系统。| | / )){
美元+;
}
rankarr美元=分裂( /
ranknum美元=计数($ rankarr);
= $ ;
(J = 1;对美元美元美元,<< ranknum;j++){
$ 只是所有;
}
如果($ PID = = { } {我classarr美元美元'id' }){
选定的$ 选定;
其他{ }
=选定的$ ;
}
回声T classarr美元。美元美元} { {我'classname}。;
}
>
当操作 /保存时
做 / /改变所有等级的值改变分类,使原来的子类别一般等级的价值,这是排名值加上其ID值的分类。
替换mysql语句的替换
如果(PID)!= 0){
pidrank美元= SelectValue('w_faqclass,$ PID,'rank,'id');
等级=美元美元美元pidrank PID。;
其他{ }
=;
}
orank美元= SelectValue('w_faqclass,$ IDS,'rank,'id'),入侵检测系统。;
nrank =美元美元美元ID排序。;
mysql_query(更新` w_faqclass `组的秩=取代(等级,orank美元。,nrank美元。);
mysql_query(更新` w_faqclass `集` className ` =$类名。
4。简单的删除和查询,这不是多余的,提一点,记得删除之前删除的子类下的子类可以。
济德美元= SelectValue('w_faqclass,$ IDS,'id','pid);
如果($济德> 0){
…
}
上面的无限分类的实现方法是mysql,希望对你有所帮助。