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

SQL关联两张表查询指定用户所有活动及接受/主办状态邀请统计数

问题根因

你当前的写法存在两个核心问题,导致会过滤掉无符合条件邀请的活动:

  • 用RIGHT JOIN且将status的筛选条件放在了WHERE子句中:没有匹配邀请记录、或者邀请记录都不符合accepted/host的活动会被直接过滤
  • 直接用COUNT(b.status)会统计所有非空的邀请状态,无法实现只统计指定状态的需求
解决方法

调整连接方式,将状态筛选逻辑移到计数逻辑内即可,修改后的语句如下:

var sqlString = "SELECT a.name, a.venueAdresse, a.userID, a.tblEventID, a.venueCity, a.startTimeAndDateUnixTicks, a.displayStartTime, a.slots, a.eventPictureThumb, \
SUM(CASE WHEN b.status IN ('accepted', 'host') THEN 1 ELSE 0 END) AS valid_invite_count \
FROM 10561_12865_tblEvents a \
LEFT JOIN 10561_12865_tblInvites b ON a.tblEventID = b.tblEventID \
WHERE a.userID = '" + userID + "' \
GROUP BY a.tblEventID \
ORDER BY a.createdUnixInt DESC \
LIMIT " + start + "," + count
改动说明
  • 将RIGHT JOIN改为LEFT JOIN:以活动表为主表,保证所有指定USERID的活动都会被保留,不管是否存在对应的邀请记录
  • 用SUM(CASE WHEN ...)实现条件计数:只有状态为accepted或host的邀请才会被计入统计值,没有符合条件的记录时自动返回0,不会过滤活动
  • 新增GROUP BY a.tblEventID:按活动唯一ID分组,保证每个活动返回一条独立的统计结果
  • 给统计列添加别名valid_invite_count,方便后续业务代码取值

如果你的数据库支持COUNT_IF语法,也可以把统计部分替换为COUNT_IF(b.status IN ('accepted', 'host')) AS valid_invite_count,写法更简洁。

内容的提问来源于stack exchange,提问作者innom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:54:01