You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:05:18