我有'CATEGORY'这样的表
| NUMBER | NAME | TITLE | UP_CATEGORY |
-------------------------------------
| 1 | AAA | | 0 |
-------------------------------------
| 2 | BBB | | 0 |
-------------------------------------
| 3 | CCC | | 1 |
-------------------------------------
| 4 | DDD | | 2 |
-------------------------------------
| 5 | EEE | | 3 |
-------------------------------------
我想在网页导航中使用像标题符号这样的标题(主页>类别1>类别2)。 在这种情况下,标题应如下所示:
AAA = AAA
BBB = BBB
CCC = CCC :: AAA
DDD = DDD :: BBB
EEE = EEE :: CCC :: AAA
在纯MySQL中甚至可以做到这一点吗?我搜索了自我加入但没有好的结果。
我尝试过这样的事情并没有奏效:
UPDATE t1 SET t1.title = t2.name
FROM category t1, category t2 WHERE t2.up_category = t1.number
我是否会以良好的方式实现我想要的目标?
修改
@ Alex,我不认为我的问题与How to create a MySQL hierarchical recursive query重复,但在某些方面类似。它帮助我做出了正确的选择以达到我想要的效果(使用Managing Hierarchical Data in MySQL)。
SELECT的代码:
SELECT CONCAT_WS(" :: ",t3.name,t2.name,t1.name), t3.number, t2.number, t1.number
FROM category AS t1
LEFT JOIN category AS t2 ON t2.up_category = t1.number
LEFT JOIN category AS t3 ON t3.up_category = t2.number
WHERE t1.up_category = 0
所以我现在有4列的结果 - 第1列 - 我的'面包屑' - 第二列 - 第三个孩子的id(数字或NULL,因为有时父母只有一个孩子) - 第3栏 - 第二个孩子的身份证(号码) - 第4栏 - 第一个孩子的身份证(号码)
现在我正在考虑使用select的结果更新表格,但是现在我不知道如何执行此操作。
答案 0 :(得分:0)
我已经设法做到了。解决方案如下。
UPDATE category table1,
(
SELECT CONCAT_WS(" :: ",t3.name,t2.name,t1.name) AS title, IF(t3.number IS NOT NULL,t3.number,IF(t2.number IS NOT NULL,t2.number,t1.number)) AS id_cat
FROM category AS t1
RIGHT JOIN category AS t2 ON t2.up_category = t1.number
RIGHT JOIN category AS t3 ON t3.up_category = t2.number
) table2
SET table.title = table2.new_title
WHERE table1.number = table2.id_cat
我认为它涵盖了所有。这样或那样的方式很有效。