SQLite查询:统计每位成员参与编辑的订单数量
SQLite关联统计逗号分隔权限字段对应的订单数方案
核心匹配逻辑要规避ID部分匹配的问题:比如member_id为2不能误匹配到member_ids中的12、23这类值,我们通过给匹配字符串两侧补逗号的方式实现精确匹配。
可用查询语句
SELECT m.member_id, m.name, COUNT(o.order_id) AS order_count FROM tbl_members m LEFT JOIN tbl_orders o ON ',' || o.member_ids || ',' LIKE '%,' || CAST(m.member_id AS TEXT) || ',%' GROUP BY m.member_id, m.name;
逻辑说明
- 用LEFT JOIN关联两张表,没有可编辑订单的成员也会返回统计值0,不会遗漏成员数据
- 关联条件中先给订单的
member_ids首尾都拼接逗号,再匹配首尾带逗号的成员ID,哪怕member_ids末尾有多余逗号(比如示例中的1,2,34,23,65,)也能正常兼容 - 用
CAST(m.member_id AS TEXT)做类型转换,避免数字和字符串比较时出现异常 COUNT(o.order_id)会自动忽略空值,无匹配订单的成员统计结果自动为0
优化建议
如果数据量较大,该匹配方式无法走索引,查询效率偏低。建议后续调整表结构,新增成员订单权限中间表,存储order_id和对应可编辑的member_id的一对一关联关系,后续查询性能会有明显提升。
内容的提问来源于stack exchange,提问作者ddhb
相关产品推荐
相关产品推荐

