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

如何使用Gorm查询包含指定user_id的room_id关联的所有行

你这个需求的核心逻辑是先找到user_id为usrItug3Lj2c5的所有关联room_id,再查询这些room_id下的全部记录,用Gorm有两种常见实现方式:

第一步:先定义对应数据表的Gorm模型

type RoomMember struct {
    RoomID string `gorm:"column:room_id"`
    UserID string `gorm:"column:user_id"`
    Role   string `gorm:"column:role"`
}

// 绑定对应表名,根据你实际表名修改即可
func (RoomMember) TableName() string {
    return "room_members"
}

实现方式1:子查询(单次SQL查询,性能更优,推荐使用)

targetUserID := "usrItug3Lj2c5"
var result []RoomMember

err := db.Where("room_id IN (?)", 
    db.Model(&RoomMember{}).Select("room_id").Where("user_id = ?", targetUserID),
).Find(&result).Error
if err != nil {
    // 自行添加错误处理逻辑
}

该写法最终生成的SQL和需求完全匹配:

SELECT * FROM room_members WHERE room_id IN (SELECT room_id FROM room_members WHERE user_id = 'usrItug3Lj2c5');

实现方式2:分两次查询(逻辑更直观,适合数据量较小的场景)

targetUserID := "usrItug3Lj2c5"
var roomIDs []string
var result []RoomMember

// 第一步:查询目标用户所属的所有room_id
err := db.Model(&RoomMember{}).Select("room_id").Where("user_id = ?", targetUserID).Find(&roomIDs).Error
if err != nil {
    // 自行添加错误处理逻辑
}

// 第二步:查询这些room_id下的全部记录
err = db.Where("room_id IN ?", roomIDs).Find(&result).Error
if err != nil {
    // 自行添加错误处理逻辑
}

两种方式都可以拿到你期望的查询结果,生产环境优先使用子查询的实现即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:24:04