2015-11-18 25 views
1

我是新来的postgres,并尝试了一些东西,然后才从mySQL中跳过。如何使用postgres从子查询中获得行的关联数组

我想要做的是获得关联数组到一个单一的查询。 它与可以选择多种联系方式的用户有关,例如电话,电子邮件和Facebook,我希望将这些联系人恢复到联系人列中。

对于可视化:

{ 
"first_name": "This", 
"last_name": "is me", 
"likes": [], 
"city": null 

}

而且我想获得这样的事:

{ 
"first_name": "This", 
"last_name": "Is me", 
"likes": [], 
"city": null, 
"contact": 
    [ 
     {"type":1, "value":"[email protected]", "privacy_rule":1}, 
     {"type":4, "value":"myfacebook", "privacy_rule":1}, 
     {"type":9, "value":"mylinkedin", "privacy_rule":1} 
    ] 
} 

所以主查询将是:

SELECT u.first_name, u.last_name, u.about, ARRAY(SELECT like_id FROM users_likes l WHERE l.user_id = u.user_id), u.city FROM users u WHERE user_id = {id} 

子查询窝是的:

SELECT c.type, c.value, c.privacy_rule FROM users_contact c WHERE c.user_id = u.user_id 

但我如何将它集成在主要查询返回结果行数组? 它甚至有可能吗?

提前致谢!

Ron

回答

1

啊,经过一番补充后,这里是答案。 使用json_build_object:

SELECT u.first_name, u.last_name, 
ARRAY(SELECT like_id FROM users_likes l WHERE l.user_id = u.user_id) as likes, 
ARRAY(SELECT json_build_object("contact_id", c.contact_id, 
"value", c.value, "privacy",c.privacy) 
FROM users_contact c WHERE c.user_id = u.user_id) as contact 
FROM users_basic u WHERE user_id = {id} 

这给:

"first_name": "This", 
"last_name": "Is Me", 
"about": null, 
"likes": [], 
"city": null, 
"contact": [ 
    { 
    "contact_id": 1, 
    "value": "bbla", 
    "privacy": 2, 
    "type": "Phone" 
    }, 
    { 
    "contact_id": 3, 
    "value": "blabla", 
    "privacy": 2, 
    "type": "Company Email" 
    }, 
    { 
    "contact_id": 4, 
    "value": "blablabla", 
    "privacy": 2, 
    "type": "Telegram Id" 
    } 
] 

希望它可以帮助别人

相关问题