今天第一次在项目中用到MySQL的union查询语句,应用场景是这样的:
在开发的课程中,有多个级别,不只是最小的级别可以包含课程详细内容,次级也可以;有一个需求是统计用户学习的单词数量,单词适合这两个级别相关联的,同时是可以重复的。
统计用户学习的单词数量也就是统计用户学过的这两个级别的课程的关联单词的数量,因为分成两个级别,如果用一条SQL语句查询不太方便而且还要去重。
此时比较方便的做法就是使用union同时查询两张表,并且union可以自动去重。
nextval
解构赋值的默认值问题
let form = {a=1, b=2}
let {a, b} = form 此时: a=1, b=2
如果form中没有b或者b的值为undefined,那么b的值为undefined;如果form中b的值是null,那么b的值是null;
当b有默认值的时候,即let{a,b=3} = form 此时:a=1, b=2(b依然是2,取form中的值)
只要form中有b,且b的值不是undefined,那么b都可以通过解构得到form中b的值(包括null和"");
即:
let {a,b,c=3,d=4,e=5,f=6} = {a:1,b:2,c:undefined,d:null,e:1} 此时:c=3,d=null,e=5,f=6;
代码中的默认值问题
在代码中用到解构赋值的地方,如果通过此种方式给对象的属性添加初始值则不太合适:
比如获取商品的折扣价格的接口:
let {discount} = data
此时不能十分确定data中的discount属性的值是0或是null/undefined,虽然在前面做了相应处理,但还是要在这个接口中进行判断
这里看似可以给discount一个初始值,但后来经过验证,如果传递的值为null/""则不可以,所以依然需要在后面添加一个判断:if(!discount) { discount = 0} 来确保不会出错。