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 中文字符串首字母的获取函数分享
Nov 04 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
PHP输出日历表代码实例
Mar 27 PHP
php实现短信发送代码
Jul 05 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
Sep 23 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
thinkphp自带验证码全面解析
Sep 18 PHP
php压缩文件夹最新版
Jul 18 PHP
PHP如何根据文件头检测文件类型实例代码
Oct 14 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
php使用json-schema模块实现json校验示例
Sep 28 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 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生成缩略图的函数代码(修改版)
2011/01/18 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
手机端转换rem适应
2017/04/01 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
详解如何用webpack4从零开始构建react开发环境
2019/01/27 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
python flask实现分页效果
2017/06/27 Python
python实现多层感知器
2019/01/18 Python
python三大神器之fabric使用教程
2019/06/10 Python
Pycharm github配置实现过程图解
2020/10/13 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
小学敬老月活动方案
2014/02/11 职场文书
情人节活动策划方案
2014/02/27 职场文书
大学生就业策划书范文
2014/04/04 职场文书
小班下学期评语
2014/05/04 职场文书
社区服务活动感想
2015/08/11 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
我的收音机情缘
2022/04/05 无线电