MySQL操作分层数据

bob*_*bob 4 mysql hierarchical-data sql-update

我有 MySQL 表结构:

CREATE TABLE IF NOT EXISTS `categories` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(10) unsigned NOT NULL DEFAULT '0',
  `name` varchar(255) NOT NULL DEFAULT '',
  `is_working` tinyint(1) unsigned NOT NULL DEFAULT '1',
);
Run Code Online (Sandbox Code Playgroud)

id它保存具有和关系的分层数据parent_id

我有 5 层深度树,例如:

CATEGORY LEVEL 1
  SUBCAT LEVEL 2
    SUBCAT LEVEL 3
      SUBCAT LEVEL 4
        SUBCAT LEVEL 5
Run Code Online (Sandbox Code Playgroud)

我需要(问题):如果我is_working为某个类别或子类别设置= 0,则将其所有子类别is_working设置为0 。0

TMS*_*TMS 9

我使用的是不同的设计,虽然它有局限性,但如果你能忍受的话,它非常简单而且非常高效。

这是鸟类分类树的示例,因此层次结构为类/目/科/属/种 - 物种是最低级别,1 行 = 1 个物种:

CREATE TABLE `taxons` (
  `TaxonId` smallint(6) NOT NULL default '0',
  `ClassId` smallint(6) default NULL,
  `OrderId` smallint(6) default NULL,
  `FamilyId` smallint(6) default NULL,
  `GenusId` smallint(6) default NULL,
  `Name` varchar(150) NOT NULL default ''
);
Run Code Online (Sandbox Code Playgroud)

以及数据示例:

+---------+---------+---------+----------+---------+-------------------------------+
| TaxonId | ClassId | OrderId | FamilyId | GenusId | Name                          |
+---------+---------+---------+----------+---------+-------------------------------+
|     254 |       0 |       0 |        0 |       0 | Aves                          |
|     255 |     254 |       0 |        0 |       0 | Gaviiformes                   |
|     256 |     254 |     255 |        0 |       0 | Gaviidae                      |
|     257 |     254 |     255 |      256 |       0 | Gavia                         |
|     258 |     254 |     255 |      256 |     257 | Gavia stellata                |
|     259 |     254 |     255 |      256 |     257 | Gavia arctica                 |
|     260 |     254 |     255 |      256 |     257 | Gavia immer                   |
|     261 |     254 |     255 |      256 |     257 | Gavia adamsii                 |
|     262 |     254 |       0 |        0 |       0 | Podicipediformes              |
|     263 |     254 |     262 |        0 |       0 | Podicipedidae                 |
|     264 |     254 |     262 |      263 |       0 | Tachybaptus                   |
Run Code Online (Sandbox Code Playgroud)

这很棒,因为这样您就可以非常简单地完成所有所需的操作,只要类别不改变其在树中的级别即可。