Mysql 用ids保存层次结构替换类别名称

Mysql 用ids保存层次结构替换类别名称,mysql,Mysql,我有这样的数据表: category_name | subcategory_name | other data --------------------------------------------- fruits | apples | ... fruits | oragnes | ... id | name | parent_id ------------------------ 1 | fruits | 0 2

我有这样的
数据
表:

category_name | subcategory_name | other data
---------------------------------------------
fruits        | apples           | ...
fruits        | oragnes          | ... 
id | name   | parent_id
------------------------
1  | fruits | 0
2  | apples | 1
3  | oragnes| 1
category_id | subcategory_id | other data
---------------------------------------------
1           | 2              | ...
1           | 3              | ... 
用ID替换类别和子类别名称并将其移动到其他表中的最佳方法是什么?得到这样的结果:

类别
表格:

category_name | subcategory_name | other data
---------------------------------------------
fruits        | apples           | ...
fruits        | oragnes          | ... 
id | name   | parent_id
------------------------
1  | fruits | 0
2  | apples | 1
3  | oragnes| 1
category_id | subcategory_id | other data
---------------------------------------------
1           | 2              | ...
1           | 3              | ... 
数据
表格:

category_name | subcategory_name | other data
---------------------------------------------
fruits        | apples           | ...
fruits        | oragnes          | ... 
id | name   | parent_id
------------------------
1  | fruits | 0
2  | apples | 1
3  | oragnes| 1
category_id | subcategory_id | other data
---------------------------------------------
1           | 2              | ...
1           | 3              | ... 

我可以使用一些select distinct和join查询手动完成所有操作,但有更好的方法吗?

可能有更简单的方法;但是mysql不包含我想在这里使用的许多窗口函数,也不包含常用的表表达式,也不包含带有用户变量的视图。。。。所以我留下了一点混乱,但它似乎工作

我假设你当前的模型可能有N个级别。 我还假设在多个类别下不存在子类别

它的作用是

  • 生成一组包含“名称”的数据,我们必须找到没有父类别的所有名称,并将这些名称与父类别的名称合并
  • 然后我们为每个项目分配了一个用户变量(@),以生成一个新的ID。使用了两个不同的变量,因此编号不会从一个查询换行到下一个查询
  • 然后,我们将该查询复制到两个单独的子查询(在我的示例中是A、B)中,并将它们连接起来以获得父ID
  • 从上面的选择中,您可以创建表或填充表