我在从mysql数据库中选择数据时遇到问题。我不知道如何解释我的问题,所以
这是我在user
表中拥有的数据...
从用户中选择*
USERID NAME
.1. A
.1.1. B
.1.2. C
.1.2.1. D
.2. E
.2.1. F
.2.1.1. G
.2.1.1.1. H
.3. I
.3.1. J
我希望得到的结果
PARENT USERID NAME
- .1. A
.1. .1.1. B
.1. .1.2. C
.1.2. .1.2.1. D
- .2. E
.2. .2.1. F
.2.1. .2.1.1. G
.2.1.1. .2.1.1.1. H
- .3. I
.3. .3.1. J
有可能吗?
答案 0 :(得分:1)
您可以通过检查USERID
是否与.
的模式匹配,然后跟一些数字,再跟一个.
作为整个字符串来进行此操作(使用正则表达式{{1} }),如果是,则返回'^\\.[0-9]+\\.$'
;如果不是,则生成-
的子字符串,直到(包括倒数第二个USERID
):
.
输出:
SELECT
CASE WHEN USERID REGEXP '^\\.[0-9]+\\.$' THEN '-'
ELSE SUBSTRING(USERID, 1, LENGTH(USERID) - LOCATE('.', SUBSTRING(REVERSE(USERID), 2)))
END AS PARENT,
USERID,
NAME
FROM user
要获取PARENT USERID NAME
- .1. A
.1. .1.1. B
.1. .1.2. C
.1.2. .1.2.1. D
- .2. E
.2. .2.1. F
.2.1. .2.1.1. G
.2.1.1. .2.1.1.1. H
- .3. I
.3. .3.1. J
中的NAME
,我们将PARENT
的结果返回到LEFT JOIN
值的user
表中:
PARENT
输出
SELECT u.*, COALESCE(p.NAME, '-') AS PARENTNAME
FROM (
SELECT
CASE WHEN USERID REGEXP '^\\.[0-9]+\\.$' THEN '-'
ELSE SUBSTRING(USERID, 1, LENGTH(USERID) - LOCATE('.', SUBSTRING(REVERSE(USERID), 2)))
END AS PARENT,
USERID,
NAME
FROM user
) u
LEFT JOIN user p ON p.USERID = u.PARENT
ORDER BY USERID
答案 1 :(得分:1)