zoukankan      html  css  js  c++  java
  • 小程序开发笔记【一】,查询用户参与活动列表 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

  • 相关阅读:
    mysql常用方法案例
    springboot整合mybatis
    mysql自定义函数统计订单状态:GET_ORDER_STATUS()
    mysql计算时间差-本例为计算分钟差然后/60计算小时保留一位小数,由于直接得小时只会取整
    mysql字段值为null时排序问题
    对象与内存(一)
    java基础提升(关于数组)
    项目的部署
    myeclipse中ssm的搭建
    ui自动化笔记 selenium_webdriver,ui自动化框架(web)
  • 原文地址:https://www.cnblogs.com/fozero/p/10632949.html
Copyright © 2011-2022 走看看