我需要更新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 |
使用字段“ sort”和“ level”创建层次结构。我无法更改此设置,因为它不是“我的”表格设计。
我需要一个UPDATE来根据以下规则将字段“ visible”设置为true或false:“如果类别包含产品,或者它是包含产品类别的父项,则该类别可见。”
所以在我的示例中,结果应该是:
+------+------------------------------+---------+
| 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中是否可以通过一个查询解决这个问题?
答案 0 :(得分:0)
SELECT c1.id, c1.name, SUM(c2.product_count) > 0 AS visible
FROM categories AS c1
JOIN categories AS c2 ON c2.name LIKE CONCAT(c1.name, '%')
GROUP BY c1.id