【发布时间】:2014-10-29 23:20:04
【问题描述】:
我在 postgres 9.3.5 中有一个如下所示的表:
CREATE TABLE customer_area_node
(
id bigserial NOT NULL,
customer_id integer NOT NULL,
parent_id bigint,
name text,
description text,
CONSTRAINT customer_area_node_pkey PRIMARY KEY (id)
)
我查询:
WITH RECURSIVE c AS (
SELECT *, 0 as level, name as path FROM customer_area_node WHERE customer_id = 2 and parent_id is null
UNION ALL
SELECT customer_area_node.*,
c.level + 1 as level,
c.path || '/' || customer_area_node.name as path
FROM customer_area_node
join c ON customer_area_node.parent_id = c.id
)
SELECT * FROM c ORDER BY path;
这似乎适用于构建诸如 building1/floor1/room1、building1/floor1/room2 等路径。
我希望能够轻松地将其转换为代表树结构的 json,我被告知我可以使用 row_to_json 来完成。
作为一种合理的选择,我可以通过任何其他方式将数据格式化为更有效的机制,这样我实际上可以轻松地将其转换为实际的树结构,而无需在 / 上添加大量 string.splits。
是否有一种相当简单的方法可以使用 row_to_json 做到这一点?
【问题讨论】:
-
你能提供样本数据吗?
标签: sql json postgresql recursion postgresql-json