当前位置:Gxlcms > PHP教程 > mysql-重新研究这个问题:php无限分类的子分类如何再排序

mysql-重新研究这个问题:php无限分类的子分类如何再排序

时间:2021-07-01 10:21:17 帮助过:3人阅读

第一步。建立无限分类表。

  1. <code>CREATE TABLE IF NOT EXISTS `chi_category` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `DishCategory_Path` varchar(255) DEFAULT NULL,
  4. DishCategory_Sort int(11),
  5. `DishCategory_Name` varchar(255) DEFAULT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
  8. </code>

第二步。使用以下查询语句

  1. <code>SELECT `id`,`DishCategory_Path`,`DishCategory_Name`,`DishCategory_Sort`,concat(`DishCategory_Path`,'-',id) as fullpath FROM `chi_category` order by fullpath
  2. </code>

第三步。看上面的语句结尾时order by fullpath。这个时候大致排序是正确的。
但是DishCategory_Sort这个字段的值没有排序。
因为order by要求当按照多个列进行排序时,只有第一列相同时才使用第二列。但是第一组fullpath是不可能相同的。所以现在不知道DishCategory_Sort这个字段的值如何排序。

我想实现的正确的情况是先按fullpath排序,然后 子分类例如 (川菜、卤菜)应该在上级分类(吃的)之下进行子分类的排序,如图所示 卤菜应该排在川菜前面才对。
那么现在怎么处理呢?各位大神

回复内容:

第一步。建立无限分类表。

  1. <code>CREATE TABLE IF NOT EXISTS `chi_category` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `DishCategory_Path` varchar(255) DEFAULT NULL,
  4. DishCategory_Sort int(11),
  5. `DishCategory_Name` varchar(255) DEFAULT NULL,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
  8. </code>

第二步。使用以下查询语句

  1. <code>SELECT `id`,`DishCategory_Path`,`DishCategory_Name`,`DishCategory_Sort`,concat(`DishCategory_Path`,'-',id) as fullpath FROM `chi_category` order by fullpath
  2. </code>

第三步。看上面的语句结尾时order by fullpath。这个时候大致排序是正确的。
但是DishCategory_Sort这个字段的值没有排序。
因为order by要求当按照多个列进行排序时,只有第一列相同时才使用第二列。但是第一组fullpath是不可能相同的。所以现在不知道DishCategory_Sort这个字段的值如何排序。

我想实现的正确的情况是先按fullpath排序,然后 子分类例如 (川菜、卤菜)应该在上级分类(吃的)之下进行子分类的排序,如图所示 卤菜应该排在川菜前面才对。
那么现在怎么处理呢?各位大神

把Dishcategory_sort 放入fullpath和DishCategory_Path

  1. <code>mysql> insert into chi_category values(11, '0-0', 0), (12, '0-0', 0), (13, '0-0-0-11', 2), (14, '0-0-0-11', 1);
  2. Query OK, 4 rows affected (0.00 sec)
  3. Records: 4 Duplicates: 0 Warnings: 0
  4. mysql> SELECT `id`,`DishCategory_Path`,`DishCategory_Sort`,concat(`DishCategory_
  5. Path`,'-',Dishcategory_sort, '-', id) as fullpath FROM chi_category order by fullpath;
  6. +----+-------------------+-------------------+---------------+
  7. | id | DishCategory_Path | DishCategory_Sort | fullpath |
  8. +----+-------------------+-------------------+---------------+
  9. | 11 | 0-0 | 0 | 0-0-0-11 |
  10. | 14 | 0-0-0-11 | 1 | 0-0-0-11-1-14 |
  11. | 13 | 0-0-0-11 | 2 | 0-0-0-11-2-13 |
  12. | 12 | 0-0 | 0 | 0-0-0-12 |
  13. +----+-------------------+-------------------+---------------+
  14. 4 rows in set (0.00 sec)
  15. </code>

人气教程排行