小程序开发笔记【一】,查询用户参与活动列表 left join on的用法
2023-09-11 14:19:37 时间
今天在做一个用户活动查询功能的时候,查询参与的活动。正常,使用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]);
参考阅读
相关文章
- Python基础之:数字字符串和列表
- AndroidStudio快捷键——打开最近编辑文件列表视图——(一)
- Jquery 连动下拉列表
- Android Listview SimpleAdapter的使用完整示例(实现用户列表)
- Flutter移动电商实战 --(26)列表页_使用Provide控制子类-2
- react-native 项目实战 -- 新闻客户端(5) -- 完善首页列表数据
- 33Vue - 列表渲染(key)
- [转]微软word的多级列表的bug的解决办法和吐槽
- 渗透基础——获得当前系统已安装的程序列表
- 《Python数据科学指南》——1.22 列表排序
- Swift - 列表项尾部附件点击响应(感叹号,箭头等)
- DedeCms 首页、列表页调用文章body内容的方法
- VUE-011-通过 v-if 和 v-for 实现特定值的列表循环匹配,并显示满足匹配条件的值
- 【excel解析并展示在table列表】
- GDB ------ 为断点设置命令列表
- Python列表推导式使用举例
- Python: 列表推导式
- Flutter开发 - 监听滑动列表(解决特殊列表严重占用内存问题),并在滑动时暂停动画,暂停还未完成的下载操作,列表停止后恢复
- 交互生成数字列表
- 二、从后端请求到的列表数据,存在于对象数组中每个元素的不同属性对象中