Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
网页URL的递归sql查询_Sql_Postgresql - Fatal编程技术网

网页URL的递归sql查询

网页URL的递归sql查询,sql,postgresql,Sql,Postgresql,我正在使用postgresql,但如果有一种通用的sql方式,那就更好了 我有一个存储网页数据的表,包括slug(例如在example.com/x/y中,x和y都是slug)和parent_id(x和y在此表中都有一条记录。x的id与y的parent_id匹配) 如果我有y的id,有没有一种简单的方法可以找到完整的URL(/x/y)?或者至少所有的id(/x\u id/y\u id) 我知道我可以在这个特殊的例子中得到如下结果: select parent_id from pages where

我正在使用postgresql,但如果有一种通用的sql方式,那就更好了

我有一个存储网页数据的表,包括slug(例如在example.com/x/y中,x和y都是slug)和parent_id(x和y在此表中都有一条记录。x的id与y的parent_id匹配)

如果我有y的id,有没有一种简单的方法可以找到完整的URL(/x/y)?或者至少所有的id(/x\u id/y\u id)

我知道我可以在这个特殊的例子中得到如下结果:

select parent_id from pages where slug like 'x';
=>5

并获取该id的slug:

select slug from pages where id = (select parent_id
  from pages where slug like 'x');
=>y


但是如果URI更像/a/b/c/d/e/f/g呢?如果我只有g的id,有没有一种简单的方法可以找到所有这些?

因为@a_hourse-with_no_name说递归CTE应该照顾你。这是我最喜欢的CTE链接:

在这个网站上搜索“递归公共表表达式”。或者查看Postgres手册:(这是ANSI SQL,因此是一种“通用SQL方式”),我想知道为什么有人否决了我的问题?感觉像是肋骨被戳了一下。我想他们是想告诉我不应该问这样的问题。。。但是为什么?@David:可能是因为这个问题即将结束的原因:“询问代码的问题必须表明对正在解决的问题的最低理解。包括尝试的解决方案,为什么它们不起作用,以及预期的结果。”在这里投票的合理原因包括缺少样本数据和预期的结果,没有PostgreSQL版本,没有关于您在发布之前已经尝试/阅读过的任何内容的讨论。也就是说,随机驾驶下行票也是一种危险。请注意,与SQL Server Postgres不同,Postgres需要使用关键字
RECURSIVE
来进行递归CTE(这符合SQL标准,该标准也强制使用该关键字),谢谢您的更正。