¿如何使用Postgresql进行父子订购?

时间:2017-09-13 18:06:58

标签: postgresql

我需要像父母那样呈现数据 - >孩子(行)。我有一个动作按钮,在它下面创建一个新行。

示例:

1 PETER GREGORY 01/01/1987

2 MINK PETERS 01/01/1987(点击此处)

3 CHILD ROW 01/01/1987

我的数据库有以下列:

ID ------ NAME ------ LASTNAME ------ DATE

1 个答案:

答案 0 :(得分:1)

首先,您必须拥有数据库,我将创建一个通用的

-- this will create your table + primary key (i'm not sure what action data type is)
create table test (
 id serial PRIMARY KEY,
 id_parent integer,
 col1 text
)

在每个插页上,您将自动生成 id 字段,因为它是一个序列,您不需要在插入语句中添加它

假设您已经拥有root父级,这意味着id_parent值为null

root id = 1,2,3

  • INSERT INTO test (id_parent, col1) values (null, 'I'm parent 1')
  • INSERT INTO test (id_parent, col1) values (null, 'I'm parent 2')
  • INSERT INTO test (id_parent, col1) values (null, 'I'm parent 3')

因此,当您想要插入值时,您只需运行查询

INSERT INTO test (id_parent, col1) values (1, 'parent id is 1')

上面的插入语句会自动生成 id 字段,因为它是一个序列号。

如果我们再插入一些记录

  • INSERT INTO test (id_parent, col1) values (1, 'parent id is 1')
  • INSERT INTO test (id_parent, col1) values (1, 'second insert parent id is 1')
  • INSERT INTO test (id_parent, col1) values (2, 'first insert parent is 2')
  • INSERT INTO test (id_parent, col1) values (2, 'second insert parent id is 2')

你现在应该在db中有7条记录,3个根父母和我们插入的4个孩子

要检索您想要通过连接语句

引用到父列的数据
select 
  parent.id
 ,child.id
 ,child.parent_id 
from test parent
  join test child = parent.id = child.id_parent
order by child.parent_id

你会得到一些看起来像

的东西
parent.id | child.id | child.parnet_id
1         | 4        | 1
1         | 5        | 1
2         | 6        | 2
2         | 7        | 2

然后如果你通过

为parent_id 1做另一个插入
  • INSERT INTO test (id_parent, col1) values (1, 'parent id is 1')

你会得到

parent.id | child.id | child.parnet_id
1         | 4        | 1
1         | 5        | 1
1         | 8        | 1
2         | 6        | 2
2         | 7        | 2

如果要将同一个表用于递归连接,这是一般基础知识。我希望有帮助吗?我还没有测试任何代码,所以可能会有一些语法错误,但这是一般的想法