小程序开发笔记【一】,查询用户参与活动列表 left join on的用法

今天在做一个用户活动查询功能的时候,查询参与的活动。正常,使用egg-mysql查询数据一般会这么写

    result = await this.app.mysql.select('tb_activity_apply', {
      where: { userid: userid },
      orders: [['createtime', 'desc']], // 排序方式
      limit: pageSize,// 返回数据量
      offset: (pageNum - 1) * pageSize, // 数据偏移量
    })

但因为涉及到两张表,也不知道egg-mysql是否支持表关联查询 ,如果按照上面这种方式的话 ,实现步骤就是,先遍历查询活动报名表,拿到用户参与报名的活动id,然后在根据
活动id去遍历活动表查询到用户参与的活动数据,这次需要2次遍历,想想就不太好,如果活动表数据量小的话那还没事,但数据量大的话,比如1万条甚至10万数据,这么遍历的话会疯掉 ,所以这种方式pass掉。

所幸的是,egg-mysql支持直接写sql语句

语法如下:

    this.app.mysql.query('select * from tb_activitiy where id = ?',[id]);

所以这里我通过直接写sql语句的方式实现该功能,使用left join on 左连接实现mysql的多表关联查询 ,这里left join on 左连接的意思就是查询a,b两张表,通过一个外键进行关联,以左表为基准,左表一条记录如果对应右表多条记录,那查出的数据中右表的数据也只显示一条

ORDER BY b.createtime 时间排序
limit 0,3 分页 语法 limit m,n 其中m表示从第几条开始,n表示取几条

最后实现的代码

    let sql = 'select b.* from tb_activity_apply a left join tb_activity b on a.activityid = b.activityid where a.userid = ? ORDER BY b.createtime DESC limit ?,?';
    result = await this.app.mysql.query(sql, [userid, (pageNum - 1) * pageSize, pageSize]);

参考阅读

https://www.cnblogs.com/softidea/p/6934950.html

原文地址:https://www.cnblogs.com/fozero/p/10632949.html