Py学习  »  DATABASE

从MySQL数据库中选择数据时遇到问题

Vanestica Ireline • 5 年前 • 1688 次点击  

从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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51473
 
1688 次点击  
文章 [ 3 ]  |  最新文章 5 年前
PHP Geek
Reply   •   1 楼
PHP Geek    5 年前
If you have parent table , you can get data using "JOIN" by parent_id
please share some tables detailfor more refrence
sumit
Reply   •   2 楼
sumit    5 年前

可以使用子字符串索引修剪最后两个句点之间的字符

所以你的问题如下

select 
case when parent ='' then '-' else concat(parent,'.') end  as parent ,
userid,
name
from
(
select 
TRIM(TRAILING concat('.',substring_index(TRIM(TRAILING '.' from USERID), '.', -1),'.')  from USERID) as parent, 
NAME as name,
USERID from user
)tmp

工作小提琴 http://sqlfiddle.com/#!9/36435a/13

Nick
Reply   •   3 楼
Nick    5 年前

你可以通过检查 USERID 符合 . 后面跟一些数字,后面跟一个 . 作为整个字符串(使用regex '^\\.[0-9]+\\.$' )如果是,返回 - ;如果不是,则生成 用户ID 直至(包括倒数第二个 . ):

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

Demo on dbfiddle

同时获得 NAME PARENT ,我们 LEFT JOIN 以上结果返回到 user 上的桌子 起源 价值:

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

Demo on dbfiddle