最近写了一个需求,比如创建一个活动,限制某几个部门能参加,在活动列表仅对能参加的用户展示这些活动。
活动表主要字段如下:
id | department_limit (json 字段) |
---|---|
1 | [1,2,3] |
2 | [3,4,5] |
这张表里面 department_limit
字段为部门 id 数组, 意思是只有这几个部门的用户能参加,否则就权限不足。
接口请求时,是可以查询到用户所有的部门, 比如用户在 [1, 2]部门, 就可以参加 id 为 1 的活动,且活动列表会显示 id 为 1 的活动,不会显示 id 为 2 的活动。
问题是:
如何通过 SQL 语句去实现这样的取交集过滤查询?
MySQL 8.0 有个函数 JSON_OVERLAPS() 可以实现这样的操作,但是我用的是 5.7 版本。
目前我的做法是,SQL 语句查询时,不过滤部门限制的条件,查询出来后再通过代码过滤不符合的数据,但是会有个问题,会出现数据和分页对不上的情况,而且这样处理感觉不优雅。
所以我想问一下:
1 有什么更好的办法查询过滤能参加活动的数据?
2 限制参加部门,表字段设计的是否有问题?或者有没有其他的设计思路?
先感觉各位大佬了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.