如何使用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
相关产品推荐
相关产品推荐

