聚合返回*作为数组

时间:2018-10-02 10:38:01

标签: sql arrays json postgresql

我有一个简单的查询:

SELECT GROUP_CONCAT(DISTINCT t1.user_url) as user_url, t1.user_portal as user_portal
FROM wp_users AS t1
WHERE t1.user_url IS NOT NULL AND t1.user_url != ""
GROUP BY user_portal

这很好用,但是当然它会单独返回每一行,而我需要它返回已编辑的每一行的数组。

我在另一个查询中使用了它,这就是我想要格式化删除查询的输出的方式:

foreach ($houses as $house) {
    echo "<div class='user-box' style='background-color: #8697a8; color: #000; font-size: 24px; padding-left: 10px; padding-top: 4px; border-radius: 8;'>";
    echo $house->user_portal.' <br>';

    $user_urls = explode(',', $house->user_url);
    foreach (user_urls as $user_url) {
      echo $house->user_url.'('.$user_url.') <br>';
      echo "<a href class='url-box'style='color: #fff; font-size: 17px; margin-left: 12px; text-align: center;'>";
      echo $user_url;
      echo "</a>".' <br>';    
    }

    echo "</div>" .' <br>';
}

我无法解决的是如何在不出现语法错误的情况下将两者结合起来。

这是在PostgreSQL 9.6中。

1 个答案:

答案 0 :(得分:2)

这是您想要的吗?

with d as (
      delete from public.field
      where template_id = 1
      returning *
     )
select array_to_json(array_agg(to_json(d)))
from d;

这将返回delete的结果作为CTE。然后使用CTE生成所需的JSON表示形式。