无限级分类并按层级排序分页

存在问题:

怎么解决最下面表格橙色行的排序跟任何级别都可以orderby字段排序,或者在创建或修改项时能先计算排序?

-- 0的长度建议是字段id的长度
SELECT id, path, title, orderby, CONCAT('1', RIGHT( CONCAT(  '00000000000', IF( toppid, toppid, id ) ) , 11 ) , REPLACE( path,  ',',  '' ) , id,  '' ) AS neworderby
FROM  `categorys` 
WHERE 1 
ORDER BY IF( toppid, toppid, orderby ) ASC , IF( toppid, toppid, id ) DESC , CONCAT('1',  RIGHT( CONCAT(  '00000000000', IF( toppid, toppid, id ) ) , 11 ) , REPLACE( path,  ',',  '' ) , id,  '' ) 
LIMIT 0 , 30
-- 测试数据
DROP TABLE IF EXISTS `categorys`;
CREATE TABLE IF NOT EXISTS `categorys` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `type` tinyint(3) NOT NULL DEFAULT '0' COMMENT '分类',
  `pid` int(11) NOT NULL DEFAULT '0' COMMENT '上级',
  `toppid` int(11) NOT NULL DEFAULT '0',
  `path` varchar(2048) NOT NULL COMMENT '路径',
  `title` varchar(255) NOT NULL COMMENT '标题',
  `pyfirst` varchar(25) NOT NULL COMMENT '首字母',
  `pyall` varchar(255) NOT NULL COMMENT '全拼',
  `thumb` varchar(255) NOT NULL COMMENT '略缩图',
  `recmd` tinyint(1) NOT NULL DEFAULT '0' COMMENT '推荐',
  `orderby` int(11) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '0隐藏1显示',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4;

INSERT INTO `categorys` (`id`, `type`, `pid`, `toppid`, `path`, `title`, `pyfirst`, `pyall`, `thumb`, `recmd`, `orderby`, `status`) VALUES
(1, 2, 0, 0, '', '美食', 'm s', 'mei shi', '', 0, 0, 0),
(2, 2, 1, 1, '1', '中餐', 'z c', 'zhong can', '', 0, 0, 0),
(3, 2, 2, 1, '1,2', '早餐', 'z c', 'zao can', '', 0, 0, 0),
(4, 2, 1, 1, '1', 'dfsd', 'd', 'dfsd', '', 0, 0, 0),
(5, 2, 4, 1, '1,4', 'fdsfsd', 'f', 'fdsfsd', '', 0, 0, 0),
(6, 2, 2, 1, '1,2', 'fsdfsd', 'f', 'fsdfsd', '', 0, 0, 0),
(7, 2, 1, 1, '1', 'fdsfsd', 'f', 'fdsfsd', '', 0, 1, 0),
(8, 2, 1, 1, '1', 'dfsdf', 'd', 'dfsdf', '', 0, 0, 0),
(9, 2, 7, 1, '1,7', 'fdsfs', 'f', 'fdsfs', '', 0, 0, 0),
(10, 2, 5, 1, '1,4,5', 'fsdf', 'f', 'fsdf', '', 0, 0, 0),
(11, 2, 4, 1, '1,4', 'fsdf', 'f', 'fsdf', '', 0, 0, 0),
(12, 2, 8, 1, '1,8', 'fsdfsd', 'f', 'fsdfsd', '', 0, 0, 0),
(13, 2, 1, 1, '1', '测试', 'c s', 'ce shi', '', 0, 0, 0),
(14, 2, 0, 0, '', '酒店', 'j d', 'jiu dian', '', 0, 2, 0),
(15, 2, 14, 14, '14', '休闲', 'x x', 'xiu xian', '', 0, 0, 0);
idpath路径orderby只支持一级排序neworderby
14 110000000001414
151401000000000141415
1 21000000000011
1310100000000001113
21010000000000112
31,20100000000001123
61,20100000000001126
41010000000000114
111,401000000000011411
51,40100000000001145
101,4,5010000000000114510
71110000000000117
91,70100000000001179
81010000000000118
121,801000000000011812

 

 

 

 

 

 

 

 

 

 

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值