Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 如何从带有postgres的子查询中获取关联行数组_Postgresql_Database Design_Subquery - Fatal编程技术网

Postgresql 如何从带有postgres的子查询中获取关联行数组

Postgresql 如何从带有postgres的子查询中获取关联行数组,postgresql,database-design,subquery,Postgresql,Database Design,Subquery,我是postgres的新手,在我从mySQL跨越之前尝试了一些东西 我要做的是把一个关联数组放到一个查询中。 它与用户有关,用户可以选择多种联系人类型,如电话、电子邮件和Facebook,我想在“联系人”栏中检索这些联系人 对于可视化: { "first_name": "This", "last_name": "is me", "likes": [], "city": null } 我想得到这样的东西: { "first_name": "This", "last_name": "Is me",

我是postgres的新手,在我从mySQL跨越之前尝试了一些东西

我要做的是把一个关联数组放到一个查询中。 它与用户有关,用户可以选择多种联系人类型,如电话、电子邮件和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":"myemail@gmail.com", "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
子查询将是:

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
但是如何将其集成到主查询中以返回结果行数组呢? 有可能吗

提前谢谢


罗恩

啊,再多说几句,下面是答案。 使用json_构建_对象:

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"
  }
]
希望它能帮助别人