php怎么选择路径,php – 根据mysql中的路径选择

我有一个列id,一个列父列和一个作为物化路径的列路径.

看起来像

1 | \N | 1

2 | 1 | 1/2

3 | 2 | 1/2/3

4 | 3 | 1/2/3/4

5 | 3 | 1/2/3/5

6 | 2 | 1/2/6

7 | 6 | 1/2/6/7

8 | 2 | 1/2/8

9 | 1 | 1/9

10 | 9 | 1/9/10

11 | 10 | 1/9/10/11

12 | 11 | 1/9/10/11/12

13 | 11 | 1/9/10/11/13

14 | 11 | 1/9/10/11/14

15 | 14 | 1/9/10/11/14/15

16 | 14 | 1/9/10/11/14/16

17 | 14 | 1/9/10/11/14/17

18 | 10 | 1/9/10/18

19 | \N | 19

20 | 19 | 19\20

21 | 19 | 19\21

我需要根据这个表做一些查询.

我需要做的查询是

选择所有id为9的孩子

SELECT * FROM `tester` WHERE 'path' LIKE '%/9/%';

工作正常,直到你用1或19替换ID,因为没有/在开头.

SELECT * FROM `tester` WHERE 'path' LIKE '%1/%';

将选择数字以1结尾的所有行,因此,1,11,21,31,211等

SELECT * FROM `tester` WHERE 'path' LIKE '1/%';

适用于第1行或第19行

所以SELECT * FROMtesterWHERE’路径’LIKE’1 /%’或’路径’LIKE’%/ 1 /%’;

我能想出最好的,有什么建议吗?

选择直接子女为9但不包括子女

对于这个Select * fromtesterwhere’parent’= 9;会很好的.

选择9个孩子的总计数,x级别深.

所以我想最终得到一行level1,level2,level3,… levelx或x行,代表不同的级别,

让我们假设这个例子的x是3

这个例子中的行将是9,8,6(如果我们要求它将是3级的第4级)

有任何想法吗?

编辑

#select count of children of specific node(5) down to a maximum of three levels, do no include the parent

SELECT COUNT(child.id) children,

LENGTH(REPLACE(child.path, parent.path, '')) - LENGTH(REPLACE(REPLACE(child.path, parent.path, ''), '/', '')) AS LEVEL

FROM `tester` child JOIN `tester` parent ON child.path LIKE CONCAT(parent.path,'%')

WHERE parent.id =5

GROUP BY LEVEL HAVING LEVEL <= 3 AND LEVEL > 0;

**选择9个孩子的id低至x等级,等级为9,

因此,对于此示例,我们将使用3作为x.

我们期待着回来

10 | 1

11 | 2

18 | 2

12 | 3

13 | 3

14 | 3

我再次完全失去了如何做到这一点.

编辑:

#select all information, and relative level from parent of children of specific node(5) down to a maximum of three levels, do no include the parent

SELECT child.*,

LENGTH(REPLACE(child.path, parent.path, '')) - LENGTH(REPLACE(REPLACE(child.path, parent.path, ''), '/', '')) AS LEVEL

FROM `tester` child JOIN `tester` parent ON child.path LIKE CONCAT(parent.path,'%')

WHERE parent.id =9

GROUP BY id HAVING LEVEL <= 3 AND LEVEL > 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值