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
我使用的是不同的设计,虽然它有局限性,但如果你能忍受的话,它非常简单而且非常高效。
这是鸟类分类树的示例,因此层次结构为类/目/科/属/种 - 物种是最低级别,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)
这很棒,因为这样您就可以非常简单地完成所有所需的操作,只要类别不改变其在树中的级别即可。