thinkphp学习笔记之多表查询


Posted in PHP onJuly 28, 2014

在操作过程中,两表查询都没有问题,但是三表查询就开始出现问题

有以下三张表,分表为pl表(uid,content),user表(id,username),lyb表(uid,title)

多表查询操作有以下几种方法:

㈠视图模型(推荐)

定义视图模型,只需要继承Think\Model\ViewModel,然后设置viewFields属性即可

public $viewFields = array(
    'pl'    =>array('uid','rid','content'),
    'user'    =>array('id','username','_on'=>'pl.uid=user.id'),
    'lyb'    =>array('uid'=>'lid','content'=>'lyb_content','title','_on'=>'pl.uid=lyb.uid'), //如果表中有字段重名,可以通过=>设置别名,'uid'=>'lid'
    );

视图查询:

视图查询和不同模型的查询一样,没有什么区别。

$Model = D("pl") ->field('uid,title,username,lyb_content')->select();  //pl为数据库名

如果发现查询的结果存在重复数据,还可以使用group方法来处理。

㈡join

JOIN方法也是连贯操作方法之一,用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。

INNER JOIN : 如果表中有至少一个匹配,则返回行,等同于 JOIN
LEFT JOIN : 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN : 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN : 只要其中一个表中存在匹配,就返回行
join方法可以支持以上四种类型:

同样是对以上三张表进行操作

$Model = D("pl")
->join('lyb on pl.uid = lyb.uid')
->join('user on pl.uid = user.id') 
->field('user.username,lyb.title,pl.content')
->select();

㈢table

table方法也属于模型类的连贯操作方法之一,主要用于指定操作的数据表。

用法

一般情况下,操作模型的时候系统能够自动识别当前对应的数据表,所以,使用table方法的情况通常是为了:

切换操作的数据表;
对多表进行操作;                                                                                                                                                                                       

$Model = D("pl")
->field('pl.content,user.username,lyb.title')
->table('pl,lyb,user')
->limit(10)
->select();

注:table方法默认查询的是所有字段的值

PHP 相关文章推荐
用PHP实现验证码功能
Oct 09 PHP
用函数读出数据表内容放入二维数组
Oct 09 PHP
PHP动态变静态原理
Nov 25 PHP
粗略计算在线时间,bug:ip相同
Dec 09 PHP
关于php mvc开发模式的感想
Jun 28 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
探讨GDFONTPATH能否被winxp下的php支持
Jun 21 PHP
php实现加减法验证码代码
Feb 14 PHP
php使用反射插入对象示例分享
Mar 11 PHP
php常用文件操作函数汇总
Nov 22 PHP
PHP实现微信退款功能
Oct 02 PHP
PDO实现学生管理系统
Mar 21 PHP
CMS中PHP判断系统是否已经安装的方法示例
Jul 26 #PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 #PHP
一个简洁实用的PHP缓存类完整实例
Jul 26 #PHP
PHP实现多图片上传类实例
Jul 26 #PHP
PHP判断文章里是否有图片的简单方法
Jul 26 #PHP
php中创建和调用webservice接口示例
Jul 25 #PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 #PHP
You might like
简单的php 验证图片生成函数
2009/05/21 PHP
一些php技巧与注意事项分析
2011/02/03 PHP
PHP文章采集URL补全函数(FormatUrl)
2012/08/02 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
二级域名转向类
2006/11/09 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
jquery 字符串切割函数substring的用法说明
2014/02/11 Javascript
node.js中的fs.linkSync方法使用说明
2014/12/15 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
详解angularjs中如何实现控制器和指令之间交互
2017/05/31 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
简单叙述一下MYSQL的优化
2016/05/09 面试题
学习标兵获奖感言
2014/02/20 职场文书
车间主任岗位职责
2014/03/16 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
酒店人事主管岗位职责
2015/04/11 职场文书
2015年机关纠风工作总结
2015/05/15 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
2015年文秘个人工作总结
2015/10/14 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
Python中的tkinter库简单案例详解
2022/01/22 Python