簡體   English   中英

從Postgres查詢格式化嵌套的JSON對象

[英]Format nested JSON object from Postgres query

我想獲得一個類似於這樣的JSON對象:

{
  "username": "USERNAME",
  "teamname": "TEAMNAME",
  "logs": [
    {
      "log": {
        "log_id": 29,
        "person_id": 3,
        "activity_id": 3,
        "shoe_id": null,
        "logdate": "2016-11-29",
        "distance": null,
        "activitytime": null,
        "sleep": null,
        "heartrate": null,
        "logtitle": null,
        "description": null
      },
      "activity": "Swim", 
      "comments": {
        "comment_id": 1, 
        "description": "This is a comment", 
        "person_id": 1,
        "log_id": 29
       }
   }]
}

目前,除了評論之外,我的所有格式都正確。 這是我正在使用的SQL查詢:

SELECT p.username, t.teamname, json_agg(json_build_object('log', l.*, 'comments', c.*, 'activity', a.activity)) as logs
        FROM person_tbl p 
        INNER JOIN log_tbl l ON p.person_id = l.person_id 
        INNER JOIN activity_tbl a ON l.activity_id = a.activity_id 
        INNER JOIN comment_tbl c ON c.log_id = l.log_id
        INNER JOIN person_team_tbl pt ON p.person_id = pt.person_id 
        INNER JOIN team_tbl t on t.team_id = pt.team_id 
        WHERE t.team_id = 5
        AND l.logdate > NOW()::date - 7 
        GROUP BY p.username, t.teamname 
        ORDER BY p.username

我無法獲取每個日志的注釋。 現在,它返回每條評論並重復日志(它們沒有關聯)。

另外,當其他所有內容都為空時(如上周沒有日志的話),如何讓這個查詢返回usernameteamname

如果沒有SQLfiddle,我們不知道您的數據(和結構)是什么,因此很難回答您的問題。 對於NULL情況 - 請修改像這樣的WHERE子句(故意不使用COALESCE)

WHERE t.team_id = 5 AND (l.logdate IS NULL OR l.logdate > NOW()::date - INTERVAL '7 day')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM