基于多表条件的Supabase数据查询问题求助
解决方案
要同时满足你提出的4个查询需求,需要利用Supabase支持的嵌套过滤查询和子查询聚合,避免顶层过滤导致数据丢失。以下是可行的实现代码:
const { data, error } = await supabase .from("categories") .select(` id, name, subforums ( id, name, description, pinned_threads: threads(id, title).eq(pinned, true), thread_count: (select count(*) from threads where threads.subforum_id = subforums.id) ) `); if (error) { console.error(error); return; } // 处理返回的数据 console.log(data);
代码说明:
- 分类与子论坛基础数据:直接查询
categories的id、name字段,以及关联的subforums核心字段。 - 置顶线程获取:通过
pinned_threads: threads(id, title).eq(pinned, true)给子论坛关联的线程添加过滤条件,仅返回pinned=true的线程,并自定义字段名为pinned_threads。 - 总线程数统计:使用子查询
(select count(*) from threads where threads.subforum_id = subforums.id),针对每个子论坛单独统计其下所有线程的数量,不受置顶过滤的影响。
原代码问题分析:
你之前的.eq("subforums.threads.pinned", true)是在顶层查询添加过滤条件,这会直接过滤掉所有没有置顶线程的子论坛(甚至包含这些子论坛的分类),导致返回结果缺失或为null。而我们需要的是保留所有分类和子论坛,同时在每个子论坛内部单独处理置顶线程和计数逻辑。
内容的提问来源于stack exchange,提问作者enbermudas
相关产品推荐
相关产品推荐

