thinkjs——两表联查
问题来源:
现有一张texture以及一张tradename表,两者的联系是texture表中有一字段名为tid对应tradename表中的id,而tradename表中却有一字段type,要求根据tradename表中的type值为texture表分类显示。
解决方案:
1.欠打的麻烦又慢的solution
刚拿到手时,脑中想的第一种解决方案就是在查出texture表中现有的数据后,再取所有的tid集合,用in在texture表中用in查询,得到tradename表中的所有信息,然后再继续各种操作……
直到写到最后,才意识到自己的这种写法越写越麻烦,进而才想到或许自己的思考方向跑偏了,于是再翻看thinkjs官网中的model的介绍时,才看见有一种比较简洁的方法。
2.官方提供solution
在thinkjs官网中model本身提供了一种多表联合查询的方法:join,而这种方法就类似于我们之前用过mysql的join,只是这次自己又踩坑了:
踩坑,坑,坑:
两表联查的时候,会存在多个重复的字段名,比如 id,name……比如你要按id进行排序的话,就不能简单的写着.order('id desc'),这样写的话程序肯定就抛出异常:'Column 'id' in field is ambiguous',知道这是什么吗?

原因就在于这里的id指代不明确,因为两张表中都存在id,因此在遇到相同字段名的时候,切记要给另外一张表中同名的字段名重新命名,这样才可以完美将坑踩在脚下。
下面是正确的完整代码:
/**
* authon:xxx
* create:2017-02-10
* update:2017-02-10
* desc:xxxx
*/
'use strict';
/**
* model
*/
export default class extends think.model.base {
/**
* 获取列表方法
* @param obj
* @returns {*}
*/
getList(obj) {
let whereObj = {'type': obj.type};
if (obj.stid && obj.stid != -99) {
whereObj['texture.stid'] = obj.stid;
}
if (obj.tid && obj.tid != -99) {
whereObj['texture.tid'] = obj.tid;
}
if (obj.sid && obj.sid != -99) {
whereObj['texture.sid'] = obj.sid;
}
return this.join({ table: 'tradename', join: 'left', on: ['tid', 'id'] }).where(whereObj).order('texture.id DESC').field("tradename.id as tnid,texture.*").page(obj.page, obj.rows).countSelect();
}
}
thinkjs——两表联查的更多相关文章
- asp.net mvc 三层加EF两表联查
首先打开vs软件新建项目创建web中的mvc项目再右击解决方案创建类库项目分别创建DAL层和BLL层再把DAL层和BLL层的类重命名在mvc项目中的Models文件夹创建model类在DAL创建ADO ...
- yii2.0AR两表联查
首先,建两个关联表. 表一 -- Table structure for article -- ---------------------------- DROP TABLE IF EXISTS `a ...
- dos命令 创建数据库,建表,两表联查,三表联查(mysql---第一篇)
首先打开mysql的控制台,输入密码进行登录 (ps:本文的mysql控制台,是运用的php的集成环境(phpstudy),点击运行,找到mysql命令行,直接打开就可以了) 登陆成功后,就可以进行 ...
- thinkphp两表联查并且分页
ThinkPHP中关联查询(即多表联合查询)可以使用 table() 方法或和join方法,具体使用如下例所示: 1.原生查询示例: $Model = new Model(); $sql = 'sel ...
- iwebshop两表联查
$tb_goods = new IQuery('goods as g'); $tb_goods->join='left join miao as m on m.goods_id=g.id'; $ ...
- Group by 两表联查取另一表与之关联数据的总数
使用group by 需要查询的字段 必须要放在group by 后面 SELECT U.UserLotterySn,count(W.Userlotterysn) as WinCount,U.Acti ...
- SQLServer多表联查,多表分页查询
多表联查: select p.*,s.Sheng , i.Shifrom [dbo].[ProductRecordInfo] --表名 p left join [ShengInfo] s on ...
- MySQL多表联查之ThinkPHP中的实现
创建两个表如图: sp_user表: sp_dept表: 目的:通过sp_user的dept_id查询所属部门即sp_dept中的name. 原生sq方法一:select t1.*,t2.name a ...
- Oracle中如何实现Mysql的两表关联update操作
在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.p ...
随机推荐
- 迭代获取ViewState
string s=""; System.Collections.IDictionaryEnumerator ie=ViewState.GetEnumerator(); while ...
- 欢迎使用markdowm编辑器
欢迎使用Markdown编辑器写博客 [Mark一下CSDN用Markdown的写法而已] 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown ...
- CentOS 6.5 x64下Hadoop安装
Apache Hadoop安装部署模式 单机(本地)模式(Standalone Mode) 伪分布模式(Pseudo-Distributed Mode) 完全分布模式(Fully Distribute ...
- Jdbc获取oracle中guid主键
上代码 String sql = "BEGIN insert into itil_task_plan (PLAN_CODE) values (?) returning id into ?; ...
- 构建基于分布式SOA架构的统一身份认证体系
摘要:本文充分利用SOA架构松耦合的特点,通过规范统一网络接口实现业务系统整合,既提升系统安全性,又简化资源访问操作,具有重要的理论和现实意义. 统一身份认证旨在将分散在各个信息系统中的用户和权限资源 ...
- java分布式集群
http://blog.csdn.net/guzicheng/article/details/11580841
- Session 的生命周期
#region EntityMap /// <summary> /// 实体类值的访问器,线程安全 /// </summary> // ...
- 验证url 地址是否是图片
由于正则不是很熟悉 所以面对这样的目前只能采取两步走 一 判断url地址是否是正确的http 二判断后缀是否是图片 格式 /驗證URL function validUrl(strUrl){ strUr ...
- 用实现ajax读博客rss示例代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- 嵌入式驱动开发之usb 无线网卡驱动---RT2870STA dm368
RT2870STA 368的无线网卡驱动! http://www.linuxidc.com/Linux/2014-02/96979.htm