简单需求更改sql小记录。。。

2018年6月8日10:24:42:

最近开始接收到需求,让我写一堆的接口,大概是公司一个app需要做一些新的功能:

大概是这样:

需要一些接口数据,然后我就开始写:作为刚毕业的学生,写写接口还是很得心应手的,花费了两三天的时间写完了20几个接口之后,开始测试sql语句。

需求大概是这样:查询当前操作用户不在的所有群组

一开始我是sql语句是这样的:select a.op_id as groupId,a.icon,a.name as groupName,a.info,b.category from 

tba_user_group as a left join tba_user_group_ref as b on a.op_id=b.group_id

 where  b.user_id<>'06e996c2df884a1491d4c219e8df74b6'

然后开始插入测试数据测试,发现由于这样会导致一个群里有多个用户的时候,用户所在群组依旧会被查询出来,所以就加上了这一句:and b.group_id not in (select c.group_id from tba_user_group_ref as c where c.user_id='06e996c2df884a1491d4c219e8df74b6')

这样之后,用户所在群组有许多用户,但是这个群组仍旧会被剔除,不会被筛选出来,达到了预期的效果。本来以为结束了,后来发现了一个问题,当用户不在的群组有多个用户的时候,那个群组会被查询出来多次。这样导致数据量无端增加了很多倍。一开始我采用distinct方法,但是达不到预期效果,而且mysql的distinct好像只能放在一开始,然后我尝试用group by groupId去做。可以完成,但是后来发现了一个新的问题,我的sql语句是有查询出来groupId这个字段的,但是返回回去的groupId字段变成了查询的字段,即不是当前groupId字段,这样当我页面进行添加的时候,传过来的一定不是当前groupId字段,所以我又修改了sql语句,先把这个查询中的groupId的查询去除,然后,在所有查询结果上,把这个结果变成一个子查询,再进行一次查询,并且添加一个字段,groupId,值就为当前groupId。 所以最终在原来语句上加了一个子查询和分组查询并且把这个结果再变成一个子查询。完成了需求。











原创文章 25 获赞 5 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41450959/article/details/80619286