Php 在PostgreSQL中将jsonb列值转换为多列
假设我在PostgreSQL中有一个包含以下列的表:Php 在PostgreSQL中将jsonb列值转换为多列,php,sql,postgresql,Php,Sql,Postgresql,假设我在PostgreSQL中有一个包含以下列的表: CREATE TABLE sample ( id int, jsonb jsonb, date date ) 我插入了两行: INSERT INTO sample (id,jsonb,date) VALUES (1, '{"a":"a","b":"b"}', '2014/01/06'), (2, '{"a":"a","b":"b"}', '2014/01/06') 我想在PostgreSQL中执行select操作,将上述行转换为: 1,"
CREATE TABLE sample
(
id int,
jsonb jsonb,
date date
)
我插入了两行:
INSERT INTO sample
(id,jsonb,date)
VALUES
(1, '{"a":"a","b":"b"}', '2014/01/06'),
(2, '{"a":"a","b":"b"}', '2014/01/06')
我想在PostgreSQL中执行select操作,将上述行转换为:
1,"a","b",'2014/01/06'
2,"a","b",'2014/01/06'
从示例中调用php json_encoderows
然后得到这样的结果:
[{"id":1,"a":"a","b":"b","date":"2014/01/06"},
{"id":2,"a":"a","b":"b","date":"2014/01/06"}]
但现在,如果我从示例中调用php json_encoderows,我会得到以下结果:
[{"id":1,"jsonb":"{"a":"a","b":"b"}","date":"2014/01/06"},
{"id":2,"jsonb":"{"a":"a","b":"b"}","date":"2014/01/06"}]
希望有人能帮我解决这个问题,多亏了大家9.4使用的横向连接和jsonb函数非常简单: postgres=# SELECT * FROM sample, jsonb_to_record(jsonb, true) AS x(a text, b text); id | jsonb | date | a | b ----+------------------------------+-------------+------+-------- 1 | {"a": "a", "b": "b"} | 2014-01-06 | a | b 2 | {"a": "a", "b": "b"} | 2014-01-06 | a | b 3 | {"a": "Ahoj", "b": "Nazdar"} | 2014-01-06 | Ahoj | Nazdar (3 rows) 确切结果: postgres=# SELECT id, a, b, date FROM sample, jsonb_to_record(jsonb, true) AS x(a text, b text); id | a | b | date ----+------+--------+------------ 1 | a | b | 2014-01-06 2 | a | b | 2014-01-06 3 | Ahoj | Nazdar | 2014-01-06 (3 rows)
很棒的Pavel,这就是我想要的,非常感谢你的帮助,我正在使用模块化angularjs应用程序,随时可以问我,也许有一天我可以帮助你,干杯@AlejandroSanchez:很高兴Hi Pavel,希望你能再帮我一点,你知道如何在你和我共享的代码中添加Where子句吗?我可以这样做,但只能通过一个子查询,我不知道这是否是最好的方法。谢谢你advance@AlejandroSanchezPostgreSQL中的子查询没有问题,不用担心。jsonb_to_record函数在过去四年中发生了变化,现在是jsonb_to_recordjsonb,没有第二个参数。