【发布时间】:2018-12-17 04:59:27
【问题描述】:
我需要更新 MySql 中的层次结构。这是关于商店中的类别。
表:
CREATE TABLE `categories` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`sort` int(11) NOT NULL,
`level` int(11) NOT NULL,
`visible` tinyint(1) NOT NULL DEFAULT '1',
`product_count` int(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `sort` (`sort`),
KEY `visible` (`visible`)
);
+------+------------------------------+---------------+-------+------+
| id | name | product_count | level | sort |
+------+------------------------------+---------------+-------+------+
| 1 | Cat1 | 0 | 0 | 0 |
| 2 | Cat1.1 | 0 | 1 | 1 |
| 3 | Cat1.1.1 | 82 | 2 | 2 |
| 4 | Cat2 | 4 | 0 | 3 |
| 5 | Cat3 | 0 | 0 | 4 |
| 6 | Cat3.1 | 0 | 1 | 5 |
| 7 | Cat3.2 | 0 | 1 | 6 |
| 8 | Cat3.2.1 | 12 | 2 | 7 |
| 9 | Cat3.2.1.1 | 0 | 3 | 8 |
层次结构是使用“排序”和“级别”字段创建的。我无法更改它,因为它不是“我的”表格设计。
我需要一个更新,根据规则将“可见”字段设置为真或假:“如果一个类别包含产品,或者它是包含产品的类别的父级,则该类别可见”。
所以在我的例子中,结果应该是:
+------+------------------------------+---------+
| id | name | visible |
+------+------------------------------+---------+
| 1 | Cat1 | 1 |
| 2 | Cat1.1 | 1 |
| 3 | Cat1.1.1 | 1 |
| 4 | Cat2 | 1 |
| 5 | Cat3 | 1 |
| 6 | Cat3.1 | 0 |
| 7 | Cat3.2 | 1 |
| 8 | Cat3.2.1 | 1 |
| 9 | Cat3.2.1.1 | 0 |
是否可以在 MySql 5.6 中通过一个查询来解决这个问题?
【问题讨论】:
-
此外,您还应该提供更好的 acsii(文本格式)数据表,因为它与
create table语句不匹配。像列顺序和使用的列。 -
可能有助于stackoverflow.com/questions/20215744...一种在 MySQL 8.0 下的 MySQL 版本中进行递归查询的方法。或者stackoverflow.com/questions/3752078/…
标签: mysql