我有PostgreSQL
函数(树结构),我需要将输出转换为json
树格式。
我的PostgreSQL
功能
RETURN QUERY
WITH RECURSIVE manger_hierarchy(e_id,e_name,m_name,m_id) AS
(
SELECT
e.emp_id,e.emp_name,
m.emp_name AS man_name,e.emp_man_id
FROM emp_det e
LEFT JOIN emp_det m ON e.emp_man_id=m.emp_id
WHERE e.emp_id = id
UNION
SELECT
rp.emp_id,rp.emp_name,
mh.e_name AS manager,rp.emp_man_id
FROM manger_hierarchy mh
INNER JOIN emp_det rp ON mh.e_id = rp.emp_man_id
)
SELECT h.e_id,h.e_name,h.m_name,h.m_id
FROM manger_hierarchy h;
我的php
脚本
header('Content-Type: application/json');
$dbconn=pg_connect('host=localhost port=5432 dbname=test1 user=someuser password=somepass');
$x=$_GET['id'];
$result=pg_query($dbconn,"SELECT * FROM employe_manager_details($x)");
$y=pg_fetch_all($result);
echo json_encode($y, JSON_PRETTY_PRINT);
pg_close($dbconn);
我目前的结果
[
{
"e_id": "4",
"e_name": "john",
"e_manager": "steve",
"e_man_id": "2"
},
{
"e_id": "8",
"e_name": "jake",
"e_manager": "john",
"e_man_id": "4"
},
{
"e_id": "9",
"e_name": "wilson",
"e_manager": "john",
"e_man_id": "4"
}
]
期待结果
[
{
"e_id": "4",
"e_name": "john",
"e_manager": "steve",
"e_man_id": "2"
},
{
"e_id": "8",
"e_name": "jake",
"e_manager": "john",
"e_man_id": "4"
},
{
"e_id": "9",
"e_name": "wilson",
"e_manager": "john",
"e_man_id": "4"
}
]
答案 0 :(得分:0)
你把这个渲染成html我猜。那是对的吗?将输出包装在<pre></pre>
标签中。
试试这个:
echo '<pre>'.json_encode($y, JSON_PRETTY_PRINT).'</pre>';
答案 1 :(得分:0)
Haven未触及pgsql多年,所以不确定是否有一个函数来获取由给定列的值键入的返回数据。但是所有结果都在php变量中,你可以这样做:
$results = pg_fetch_all($result);
$ordered_results = array();
foreach ($results as $result) {
$ordered_results[$result['e_man_id']][] = $result;
}
echo json_encode($ordered_results, JSON_PRETTY_PRINT);
那将包括&#34; e_man_id&#34;返回的json的第一级中的值,并且将按照您所期望的那样嵌套值。
我不知道json_encode()中的任何选项会让你自动执行此操作。