mysql - 我在从 MySQL 数据库中选择数据时遇到问题
问题描述
我在从 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
那可能吗?
解决方案
您可以通过检查a后跟一些数字后跟 a作为整个字符串(使用正则表达式)USERID
的模式是否匹配,如果是,则返回 a ; 如果不是,则生成最多(并包括倒数第二个)的子字符串:.
.
'^\\.[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
输出
PARENT USERID NAME PARENTNAME
- .1. A -
.1. .1.1. B A
.1. .1.2. C A
.1.2. .1.2.1. D C
- .2. E -
.2. .2.1. F E
.2.1. .2.1.1. G F
.2.1.1. .2.1.1.1. H G
- .3. I -
.3. .3.1. J I
推荐阅读
- c++ - C++11 复杂
* 到 C 浮点复数 * - java - JSF PrimeFaces 在服务器端对 DataTable 进行分页
- regex - vee 验证正则表达式不起作用
- python - pyldap 和 microsoft ldap 的问题
- javascript - 为现有 JavaScript 进行 TypeScript 声明
- batch-file - 如何使用命令提示符秘密启动网站
- angular - 量角器:突然出现错误元素不可见
- angular - 如何将角度文件放入快递服务器?
- angularjs - 在打印窗口中隐藏浮动面板
- python - matplotlib 在条形图中分组条形