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 相关文章推荐
在数据量大(超过10万)的情况下
Jan 15 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
php获取新浪微博数据API实例
Nov 12 PHP
php文件上传的例子及参数详解
Dec 12 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
Symfony2之session与cookie用法小结
Mar 18 PHP
php+MySQL实现登录时验证登录名和密码是否正确
May 10 PHP
php连接oracle数据库的核心步骤
May 26 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
May 19 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
Nov 10 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
DSP接收机前端设想
2021/03/02 无线电
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
第十三节--对象串行化
2006/11/16 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
jquery dataTable 获取某行数据
2017/05/05 jQuery
Vue中的ref作用详解(实现DOM的联动操作)
2017/08/21 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
2018/07/18 Javascript
vue 2.8.2版本配置刚进入时候的默认页面方法
2018/09/21 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
Python多进程同步简单实现代码
2016/04/27 Python
Python模块包中__init__.py文件功能分析
2016/06/14 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
2018/01/16 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
python实现一个简单的ping工具方法
2019/01/31 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
python代码实现图书管理系统
2020/11/30 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
介绍一下linux文件系统分配策略
2013/02/25 面试题
函授本科毕业自我鉴定
2013/10/09 职场文书
计算机毕业大学生推荐信
2013/12/01 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
李强感恩观后感
2015/06/17 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
浅谈Web Storage API的使用
2021/06/23 Javascript
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技