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

如何将一个查询获取的ID值用于另一查询的关联条件?

动态关联团队ID获取会员到期时间

你需要把Part2中硬编码的post_id = '105271'替换为Part1中动态获取的用户所属团队ID,核心是让每个用户的到期时间和自己对应的团队ID绑定,而不是用固定值。以下是两种可行的修改方案:

方案一:独立子查询(无需依赖Part1的关联结果)

直接在Part2的子查询里复刻Part1获取团队ID的逻辑,再关联到期时间:

elseif($table == 'memberships_team_end'){
    $query_joins .= " LEFT JOIN (
        -- 先拿到每个用户对应的团队ID
        SELECT 
            CAST(pm_end.meta_value AS DATETIME) AS member_team_end,
            user_team.user_id
        FROM (
            SELECT 
                MIN(CAST(meta_value AS UNSIGNED)) AS team_id, 
                $wpdb->posts.post_author AS user_id 
            FROM $wpdb->postmeta
            INNER JOIN $wpdb->posts ON $wpdb->postmeta.post_id = $wpdb->posts.ID
            WHERE $wpdb->postmeta.meta_key = '_team_id' 
            GROUP BY $wpdb->posts.post_author
        ) AS user_team
        -- 用团队ID关联对应的到期时间元数据
        INNER JOIN $wpdb->postmeta AS pm_end 
            ON pm_end.post_id = user_team.team_id 
            AND pm_end.meta_key = '_membership_end_date'
    ) AS memberships_team_end ON $wpdb->users.ID = memberships_team_end.user_id";
}

方案二:复用Part1的关联结果(如果两个条件在同一查询上下文)

如果memberships_team的关联已经存在于主查询中,可以直接复用这个表的结果,避免重复子查询:

elseif($table == 'memberships_team_end'){
    // 先确保Part1的memberships_team已经关联到主查询
    $query_joins .= " LEFT JOIN memberships_team ON $wpdb->users.ID = memberships_team.user_id
    LEFT JOIN $wpdb->postmeta AS pm_end 
        ON pm_end.post_id = memberships_team.member_team 
        AND pm_end.meta_key = '_membership_end_date'";
    // 后续SELECT语句中可以用pm_end.meta_value AS member_team_end来取值
}

说明

  • 方案一的优势是独立,不需要依赖Part1的代码是否已经执行,适合单独处理memberships_team_end的场景。
  • 方案二更高效,避免了重复查询团队ID,适合在同一查询中同时需要团队ID和到期时间的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:50:20