我有一个表,用于存储地址的路径/每个位置都有一个代码别名及其路径。
问题是如何在单个查询中将其代码路径转换为名称路径?
桌子看起来像这样
id | code | path | name
1 011 /100/20/011 Paula Street
34 100 /100 Rekwei
23 20 /100/20 Lengdi
上方的路径为100/20/011
,应将其替换为名称/Rekwie/Lengdi/Paula Street
任何人都可以帮忙吗?
答案 0 :(得分:2)
如果将/%
附加到每个父文件夹路径,则会得到与给定路径匹配的模式。因此,您需要找到该模式匹配的所有行,以及与完整路径完全匹配的行。然后,将所有名称用GROUP_CONCAT
串联。
SET @path = '/100/20/011';
SELECT CONCAT('/', GROUP_CONCAT(name ORDER BY LENGTH(path) SEPARATOR '/')) as pathname
FROM yourTable
WHERE path = @path OR
(path LIKE CONCAT(SUBSTRING_INDEX(@path, '/', 1), '%')
AND @path LIKE CONCAT(path, '/%'))
确保在path
列上有索引。 path LIKE ...
检查将使用该索引来减少它必须在@path LIKE
表达式中扫描的行数。