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

如何获取用户未报名活动的数据?PHP+MySQL技术问询

解决方案

要获取每个用户未报名的活动,核心是先生成所有用户和所有活动的全量组合,再排除掉已存在于报名表中的记录。以下是两种可行实现方式:

方法1:交叉连接 + 左连接筛选

通过CROSS JOIN生成用户与活动的全量组合,再左连接报名表,筛选无匹配报名记录的条目:

SELECT u.id AS user_id, e.id AS event_id
FROM users u
CROSS JOIN events e
LEFT JOIN event_registration r 
  ON r.User_ID = u.id AND r.Event_ID = e.id
WHERE r.Reg_ID IS NULL
-- 若需筛选未过期活动,可添加以下条件
-- AND DATE_FORMAT(e.start,'%Y-%m-%d') >= CURRENT_DATE
ORDER BY u.id, e.id;

方法2:NOT EXISTS子查询

直接判断用户-活动组合是否未出现在报名表中:

SELECT u.id AS user_id, e.id AS event_id
FROM users u
CROSS JOIN events e
WHERE NOT EXISTS (
    SELECT 1 
    FROM event_registration r
    WHERE r.User_ID = u.id 
      AND r.Event_ID = e.id
)
-- 若需筛选未过期活动,可添加以下条件
-- AND DATE_FORMAT(e.start,'%Y-%m-%d') >= CURRENT_DATE
ORDER BY u.id, e.id;

说明

  • CROSS JOIN会生成用户表与活动表的笛卡尔积,即每个用户对应所有活动的组合;
  • 方法1通过左连接后筛选r.Reg_ID IS NULL,直接排除已报名的组合;
  • 方法2用NOT EXISTS逻辑更直观,直接判断当前组合未被报名;
  • 若仅需查询单个用户的未报名活动,可在WHERE中添加u.id = 目标用户ID的条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:55:20