我有一个column id
,一列parent
和作为实例path
化路径的一列。
看起来像
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/%';
可以正常工作,直到您将ID替换为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 * FROM
测试员WHERE 'path' LIKE '1/%' OR 'path' LIKE '%/1/%'
;
我能提出最好的建议吗?
选择9,但没有子儿的直接孩子
对于这个Select * from
测试仪where 'parent' = 9
; 会很好的工作。
选择9个孩子的总数,x个深度。
所以我想以一行level1, level2, level3, ... levelx
或x行结尾,分别代表不同的级别,
让我们假设本例中的x是3,本例中的行将是9, 8, 6
(如果我们要求的话,第4级将是3)
有任何想法吗?
编辑
#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;
请注意,这些解决方案基于字符串比较,未经过优化且不能使用索引。您应该考虑以其他方式标准化表格。(请参阅在MySQL中管理分层数据)
关于一些问题:
选择所有ID为9的孩子:
由于该Path
列不包含前斜杠和后斜杠,因此您需要将它们连接到路径:
SELECT *
FROM tester
WHERE CONCAT('/', path, '/') LIKE '%/9/%';
选择总数为9的孩子,深度为x级:
我们需要按路径中的斜杠数量减去父路径中的斜杠数量进行分组:
SELECT (LENGTH(c.Path) - LENGTH(REPLACE(c.Path, '/', '')))
- (LENGTH(p.Path) - LENGTH(REPLACE(p.Path, '/', ''))) AS Level,
COUNT(*)
FROM tester c
JOIN tester p ON c.Parent = p.ID
WHERE CONCAT('/', path, '/') LIKE '%/9/%';
GROUP BY 1
为简单起见,我使用上面的查询来显示所有级别,如果要限制x个级别的深度,请使用WHERE
下面查询中的谓词。
选择9的孩子的ID降到x级别,相对于9的级别:
我们在搜索该Path
列时会考虑到父级,但最多可以搜索到一个级别的轴数:
SELECT c.*
FROM tester c
JOIN tester p ON c.Parent = p.ID
WHERE CONCAT(
'/',
SUBSTRING_INDEX(
Path,
'/',
(LENGTH(p.Path) - LENGTH(REPLACE(p.Path, '/', ''))) + 4
),
'/') LIKE '%/9/%'
我们正在采取的步骤:
LENGTH(p.Path) - LENGTH(REPLACE(p.Path, '/', ''))
)SUBSTRING_INDEX
功能)。我的目标是开发一个单一的骆驼路线来映射这些服务器,接受路径中服务器的名称。类似于这样: 我的(简化且不起作用)Blueprint.xml: 问题是,我不知道如何从路径中移除/center、/north或/south,因此头部被传递给目标服务,而目标服务不知道如何处理它。调用:
基于路径的授权 Apache和svnserve都可以给用户赋予(或拒绝)访问许可,通常是对整个版本库:一个用户可以读版本库(或不),而且他可以写版本库(或不)。如果可能,也可以定义细粒度的访问规则。一组用户可以有版本库的一个目录的读写权限,但是没有其它的;另一个目录可以是只对一少部分用户可读。 两种服务器都使用同样的文件格式描述路径为基础的规则,如果是Apache,需要加载mod_authz_sv
问题内容: 我正在尝试在正在制作的购物车中显示图像,但没有显示出来。我必须导入每个图像吗?我知道我的路径很好,因为它以前可以工作。我认为我的product.js文件中可能有问题,但我无法弄清楚。 这是我的Product.js 数据来自此product.js 我正在提取所有数据,但图像没有显示 问题答案: 假设您使用的是webpack,则需要导入图像以使其像 现在您的图像数据是动态的,直接指定导入路
我有一个String,它是页面的路径,例如。我正在收集此页面的XML并将其保存到DAM,但我想将其保存在下的类似树结构中。 我尝试了以下代码 但它给出了以下错误 找不到{http://www.jcp.org/jcr/1.0}内容的匹配子节点定义 因为存储库中没有这样的路径。有没有一种方法可以让我即时创建一个目录。因为要保存这个文件,我需要在下创建整个树,然后保存在该目录中。 请建议。
参见文档“10. Web”部分
问题内容: 我有一张叫的桌子。在该表中,我有以下栏目:,,, 我有另一个表,唯一重要的列是,我想将其与表行进行比较。 该表如下所示: 假设我有一个表(user_meta)像这样: 我想为每个检索单个行,但前提是公司ID和user_type正确。 我想检索在查询中发送的具有相同companyID的所有用户,因此,假设$ companyID = 2,然后所有具有=’staff’的用户。 因此,user