我有类似这样的“分类”表
| 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中是可能的吗?我搜索了self-join,但没有很好的结果。
我试过这样的方法,但没有成功:
UPDATE t1 SET t1.title = t2.name
FROM category t1, category t2 WHERE t2.up_category = t1.number
我能以一种好的方式实现我想要的吗?
编辑:
@alex,我不认为我的问题与如何创建mysql分层递归查询重复,但在某种程度上类似。它帮助我做出正确的选择来实现我想要的(在mysql中使用管理分层数据)。
选择代码:
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列-我的“面包屑”-第2列-第三个孩子的id(数字或null,因为有时有父母,只有一个孩子)-第3列-第二个孩子的id(数字)-第4列-第一个孩子的id(数字)
现在我在考虑用select的结果更新表,但现在我不知道如何执行这个操作。
1条答案
按热度按时间zlhcx6iw1#
我已经做到了。解决方案如下。
我想它涵盖了所有的东西。不管怎样,这都很好。