环境:MySQL 5.6
SqlTable name = CategoryTable
Sql列- CATEGORY_ID添加(INT)
- CATEGORY_NAME (VARCHAR)
- 级别(INT)
- MOTHER_CATEGORY (INT)
我试过了
SELECT
CATEGORY_ID, CATEGORY_NAME , LEVEL , MOTHER_CATEGORY
FROM
CategoryTable
但是我不知道如何使用ORDER BY来得到那个结果。
这里的第一行是列,从第二行开始是表内容:
CATEGORY_ID CATEGORY_NAME LEVEL MOTHER_CATEGORY
1 MainCategory 0 0
2 -SubCategory1 1 1
3 --SubCategory2 2 2
4 ---SubCategory3 3 3
5 2Nd_Main_Category 0 0
6 -SubCategory1 1 5
7 --SubCategory2 2 6
8 ---SubCategory3 3 7
是否有一种方法来实现这样一个mysql查询?
你不是很清楚你想要达到什么目标。我猜您希望使用多级父-子结构进行订购。在mysql 5.6中有一些非常复杂的方法来处理这样的壮举,对于这样的结构来说,数据库并不是很理想,但我自己想出了一些简单的方法,我在自己的应用程序中使用。您可以创建一个特殊的排序字段,该字段为每个记录创建一个由0填充的id组成的路径。
ordering_path_field
/
/0000000001/
/
/0000000001/0000000002
/0000000003
/0000000003/0000000005
/0000000003/0000000005/0000000006
等
所以每个记录包含每个父节点到根节点的路径,使用零填充id。然后你就可以按这个字段排序,让它们按正确的顺序排列。缺点是你必须设置允许的最大级别数,以便排序字段不会溢出,而且,如果需要的话,将记录移动到新的父记录将是一个很大的痛苦。