使用supabase-js统计各帖子点赞总数的问题求助
解决Supabase获取含0点赞数的帖子统计问题
问题分析
你的原SQL仅统计了存在正向点赞(positive_vote = true)的帖子,对于没有任何正向点赞的帖子(比如示例中的0005)不会出现在结果中,所以需要调整查询逻辑来包含这些帖子。
修正后的SQL语句
假设你有一个存储所有帖子的Posts表(包含所有Post编号),可以通过左连接来实现需求:
SELECT p.Post, COUNT(v.Post) as TotalLikes FROM "Posts" p LEFT JOIN "Votes" v ON p.Post = v.Post AND v.positive_vote = true GROUP BY p.Post
如果没有单独的Posts表,也可以用UNION先获取所有存在的Post编号,再关联统计:
WITH AllPosts AS ( SELECT Post FROM "Votes" UNION SELECT '0005' as Post -- 若有其他无点赞的帖子需手动补充,更推荐用独立Posts表 ) SELECT ap.Post, COUNT(v.Post) as TotalLikes FROM AllPosts ap LEFT JOIN "Votes" v ON ap.Post = v.Post AND v.positive_vote = true GROUP BY ap.Post
Supabase-JS 实现代码
使用supabase-js执行上述查询的示例:
// 方式1:通过关联查询后手动计算点赞数 const { data, error } = await supabase .from('Posts') .select(` Post, Votes!Post_Votes_fkey(Post) `) if (!error) { const result = data.map(post => ({ Post: post.Post, TotalLikes: post.Votes?.length || 0 })) console.log(result) } // 方式2:调用自定义SQL存储过程(需先在Supabase控制台创建) const { data: likesData, error: likesError } = await supabase.rpc('get_post_likes')
关键说明
- 左连接(
LEFT JOIN)确保所有帖子都会被返回,即使没有对应的点赞记录 - 使用
COUNT(v.Post)而非COUNT(*):左连接后无点赞的帖子对应的v.Post为NULL,COUNT会忽略NULL值,从而得到0 - 推荐维护独立的
Posts表存储所有帖子基础信息,避免手动补充无点赞的帖子编号
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

