如何编写SQL查询连接两表并按时间筛选以填充GroupInfo结构体?
解决方法
首先假设你的组元数据表名为groups,组成员表名为group_members,可以用下面的SQL查询获取所需数据:
SELECT g.GroupID, g.DisplayName AS groupName, GROUP_CONCAT(p.PersonID SEPARATOR ',') AS groupMemberIDs FROM groups g LEFT JOIN group_members p ON g.GroupID = p.GroupID WHERE g.CreateTime >= 'start_time' AND g.CreateTime < 'end_time' GROUP BY g.GroupID, g.DisplayName;
关键细节说明:
- 数据库聚合函数差异:不同数据库的字符串聚合语法有区别,按需替换:
- MySQL/MariaDB: 使用
GROUP_CONCAT - PostgreSQL: 替换为
string_agg(p.PersonID, ',') - SQL Server: 替换为
STRING_AGG(p.PersonID, ',')
- MySQL/MariaDB: 使用
- LEFT JOIN的作用:保证即使某个组没有成员,也能被查询出来(此时
groupMemberIDs为NULL,代码里可处理为空数组) - 时间参数:把
'start_time'和'end_time'替换成实际时间值,注意格式要和CreateTime字段的存储格式匹配。
映射到结构体的代码处理:
拿到查询结果后,只需简单转换:
- 将
GroupID直接赋值给结构体的groupID字段,DisplayName对应groupName - 把
groupMemberIDs的字符串按逗号拆分,存入vector<string>类型的groupMemberIDs;如果该字段为NULL,就初始化一个空vector。
内容的提问来源于stack exchange,提问作者user23140172
相关产品推荐
相关产品推荐

