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 相关文章推荐
在Windows版的PHP中使用ADO
Oct 09 PHP
php中通过smtp发邮件的类,测试通过
Jan 22 PHP
php下目前为目最全的CURL中文说明
Aug 01 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
PHP实现的随机IP函数【国内IP段】
Jul 20 PHP
AES加解密在php接口请求过程中的应用示例
Oct 26 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获取当前文件的父目录方法汇总
2016/07/21 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
php格式文件打开的四种方法
2018/02/24 PHP
对php 判断http还是https,以及获得当前url的方法详解
2019/01/15 PHP
提交表单时执行func方法实现代码
2013/03/17 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
javascript快速排序算法详解
2014/09/17 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
JS中使用DOM来控制HTML元素
2016/07/31 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
js实现简易拖拽的示例
2020/10/26 Javascript
python进阶教程之循环对象
2014/08/30 Python
跟老齐学Python之用while来循环
2014/10/02 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
Python的装饰器用法学习笔记
2016/06/24 Python
python中正则表达式的使用方法
2018/02/25 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
django 简单实现登录验证给你
2019/11/06 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
跨域修改iframe页面内容详解
2019/10/31 HTML / CSS
迷你分体式空调:SoGoodToBuy
2018/08/07 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
益模软件Java笔试题
2012/03/27 面试题
联想C++笔试题
2012/06/13 面试题
《三峡》教学反思
2014/03/01 职场文书