首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > PHP >

非递归无限分类的,有关问题,请下

2013-08-04 
非递归无限分类的,问题,请高手指点下本帖最后由 vbker 于 2012-09-05 10:19:59 编辑数据库字段如下,暂时以

非递归无限分类的,问题,请高手指点下
本帖最后由 vbker 于 2012-09-05 10:19:59 编辑 数据库字段如下,暂时以地区代表栏目,cid为栏目ID,category为栏目名,chain为关系树,rank为栏目排序


mysql> select * from mc_category;
+-----+----------+--------------+------+
| cid | category | chain        | rank |
+-----+----------+--------------+------+
|   1 | 国内     | 0_1          |    2 |
|   2 | 国外     | 0_2          |    1 |
|   3 | 华北     | 0_1_3        |    2 |
|   4 | 东北     | 0_1_4        |    1 |
|   5 | 西部     | 0_1_5        |    3 |
|   6 | 河南     | 0_1_3_6      |    1 |
|   7 | 郑州     | 0_1_3_6_7    |    2 |
|   8 | 巩义     | 0_1_3_6_7_8  |    1 |
|   9 | 洛阳     | 0_1_3_6_9    |    1 |
|  10 | 偃师     | 0_1_3_6_9_10 |    1 |
|  11 | 辽宁     | 0_1_4        |    3 |
|  12 | 吉林     | 0_1_4_11_12  |    1 |
|  13 | 上街     | 0_1_3_6_7_13 |    2 |
+-----+----------+--------------+------+


使用 
select category,chain from mc_category group by chain order by chain;

可以按照正确的父子关系列出目录树,但是我现在还需要让同级的栏目按照rank值进行排序,这个用mysql可以做到么?




======================================================================


[解决办法]
mysql语法不是很精通 ,我一般都是输出全部数据,然后通过组装数组来列出需要的目录树
[解决办法]
select category,chain from mc_category group by chain order by chain,rank
[解决办法]
怎样才能称为同级? chain 相同?

建议你还是贴出建表和插入语句,以方便测试。。
[解决办法]
其实你将表中数据改成

insert into mc_category (cid,category,chain,rank) values 
(1, '国内', '01', 2),
(2, '国外', '02', 1),
(3, '华北', '0103', 2),
(4, '东北', '0104', 1),
(5, '西部', '0105', 3),
(6, '河南', '010306', 1),
(7, '郑州', '01030607', 2),
(8, '巩义', '0103060708', 1),
(9, '洛阳', '01030609', 1),
(10, '偃师', '0103060910', 1),
(11, '辽宁', '010410', 3),
(12, '吉林', '01041112', 1),
(13, '上街', '0103060713', 2)
这样的,一起都引刃而解了
两个字符长表示一个层次
[解决办法]
本帖最后由 xuzuning 于 2012-09-06 10:59:59 编辑 前面已经说了,“上街在巩义前面是因为 rank 降序”
那么按 rank 降序,郑州 应在 洛阳 前面
因为 洛阳 的 rank 为 1,郑州 的 rank 为 2

总不能执行不同的标准吧?你再想想?

$n = 10;
select category,chain,rank from mc_category order by 
rpad(left(chain, 2),$n,'0') desc,
rpad(left(chain, 4),$n,'0') asc,
rpad(left(chain, 6),$n,'0') asc,
length(chain)>6,
rank desc

国外021
国内012
华北01032
河南0103061
郑州010306072
上街01030607132
巩义01030607081
洛阳010306091
偃师01030609101
东北01041
辽宁0104103
吉林010411121
西部01053

热点排行