我们有一个使用 rails、react 和 postgresql 的 CMS。我们的表中存储了页面和片段。 每个页面由一组片段(数组字段)组成。
我们有可以跨多个页面使用的片段。
假设我们正在呈现 page_id 50806
。我们的 React 前端需要以下格式的数据。
pieces: [
{id: B1fu5jthb, included_on_pages: [50808, 50806]},
{id: BJTNssF2Z, included_on_pages: [50808]}
]
目前,为了找到 included_on_pages
,我正在编写一个查询来获取页面的所有部分,然后遍历每一部分以查找包含特定部分的页面。
(基本上是 N+1 查询。)
从 page_pieces 中选择 page_id = 50806 的片段
遍历每个片段
select page_id from page_pieces where 'B1fu5jthb' = any(page_pieces.pieces);
所以我的问题是
我们可以编写单个 join 语句
来获取所有片段及其 included_on_pages
最佳答案
我认为结合使用取消嵌套、ANY
比较和数组聚合应该可行:
with
pcs as (select unnest(pieces) as id from page_pieces where page_id = 50806)
select id, array_agg(page_id) as included_on_pages
from pcs inner join page_pieces on id = any(pieces)
group by id;
关于ruby-on-rails - 内部加入 postgres 数组字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46660795/