thinkphp中join用法

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

附上项目中的left join用法的代码:

1 $data = M("groups g")
2    ->field(‘g.id,g.group_name,e.uid‘)
3    ->join(‘left join equipment e ON g.group_name = e.group_name‘)
4     ->where(array(‘g.user_id‘ => ‘1‘))
5     ->select();

下面是手册中的例子:

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

  • INNER JOIN: 如果表中有至少一个匹配,则返回行,等同于 JOIN
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

join方法可以支持以上四种类型,例如:

1 $Model = M(‘Artist‘);
2 $Model
3 ->join(‘think_work ON think_artist.id = think_work.artist_id‘)
4 ->join(‘think_card ON think_artist.card_id = think_card.id‘)
5 ->select();

join方法支持多次调用,但指定的数据表必须是全称,但我们可以这样来定义:

1 $Model
2 ->join(‘__WORK__ ON __ARTIST__.id = __WORK__.artist_id‘)
3 ->join(‘__CARD__ ON __ARTIST__.card_id = __CARD__.id‘)
4 ->select();

__WORK__和 __CARD__在最终解析的时候会转换为 think_work和 think_card

默认采用INNER JOIN 方式,如果需要用其他的JOIN方式,可以改成

1 $Model->join(‘RIGHT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id‘)->select();

或者使用:

1 $Model->join(‘__WORK__ ON __ARTIST__.id = __WORK__.artist_id‘,‘RIGHT‘)->select();

join方法的第二个参数支持的类型包括:INNER LEFT RIGHT FULL。

如果join方法的参数用数组的话,只能使用一次join方法,并且不能和字符串方式混合使用。 例如:

1 join(array(‘ __WORK__ ON __ARTIST__.id = __WORK__.artist_id‘,‘__CARD__ ON __ARTIST__.card_id = __CARD__.id‘))

使用数组方式的情况下,第二个参数无效。因此必须在字符串中显式定义join类型,例如:

1 join(array(‘ LEFT JOIN __WORK__ ON __ARTIST__.id = __WORK__.artist_id‘,‘RIGHT JOIN __CARD__ ON __ARTIST__.card_id = __CARD__.id‘))
时间: 2024-07-28 22:01:49

thinkphp中join用法的相关文章

java多线程中join用法

thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程.比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B. package com.wzs; /** * Java多线程中join用法 * * @author Administrator * */ public class JoinTest { public static void main(String[] args) { BThread bThread = new B

ThinkPHP中Session用法详解

在ThinkPHP封装了Session类,用户可以直接使用,常用的方法有: Session::set(name, value):注册 session . Session::is_set(name):检查Session的值是否设置. Session::get(name):读取 session . Session::clear():清空Session. Session::destroy():销毁 session . ThinkPHP 默认开启了 session 会话,因此在使用 Session 类之

thinkphp中join的使用

两表的关联查询弄了很久,不想用tp很麻烦的关联模型,然后就看到了table和join,然后发现table不符合使用的要求.但是使用join出现了一堆的麻烦,先是表找不到(因为表没写完整,需要将整个表完整的写出来),再就是 SQLSTATE[42000]: Syntax error or access violation: 1066 Not unique table/alias: 原因是因为连接出错:表的主键要找准,$Model->join('work ON artist.id = work.ar

thinkphp中I("parm")用法的注意事项

php中用来传输的方式有两种$_GET 和 $_POST, thinkphp 提供了一种兼容两中传输方式的做法I(“param”) 但是请注意:在使用php中的函数时需要传入参数时不能用I(“parm”),必须使用采用的传输方式$_GET 或 $_POST传入,否则出错 thinkphp中I("parm")用法的注意事项,布布扣,bubuko.com

Linq中join & group join & left join 的用法

Linq中join & group join & left join 的用法 2013-01-30 11:12 12154人阅读 评论(0) 收藏 举报  分类: C#(14)  文章转自:http://www.cnblogs.com/c-jquery-linq-sql-net-problem/archive/2011/01/17/LINQ_Inner_Join_Group_Join_Left_Join.html 我们在做SQL查询的时候经常会用到Inner Join,Left Join,

经验积累thinkphp中的include的用法,还有数据库中的汉字存入变成????的问题

在新公司上班第二天,总结一些在做项目时遇到的问题,大大小小的问题我都会总结出来,一些实用性强的代码和用法我也会公布出来. 现在先总结两个小问题,待会回家有时间再发点干货. 显示thinkphp中的include的用法,其实很简单,就是所有tpl下的模板文件,都相当于是和入口文件同级. 也就是说想包含tpl/default/left.html 就写成<?php include './app/Tpl/default/left.html'?> 其中的app是项目名称,你的名称是什么就该什么. 数据库

列表[‘hello’ , ‘python’ ,’!’ ] 用多种方法拼接,并输出’hello python !’ 以及join()在python中的用法简介

列表['hello' , 'python' ,'!' ] 用多种方法拼接,并输出'hello python !' 使用字符串链接的四种方法都可以创建 字符串拼接一共有四种方法,也可以应用到列表的拼接中 a = ['hello','python','!'] 第一种是用类似字符串相加的方法 #a[0] + ' ' + a[1] + ' ' + a[2] 第二种是用%s 连接起来 #'%s %s %s'%(a[0],a[1],a[2]) 第三种是用 join 连接起来 '''这里先普及join()在p

ThinkPHP中_initialize()与__construct()用法

1 _initialize()不是php类中的构造函数,php类的构造函数只有__construct(). 2 类的初始化:子类如果有自己的构造函数__construct(),则调用自己的进行初始化,如果没有,则调用父类的构造函数进行自己的初始化 3 当子类和父类都有__construct()函数的时候,如果要在初始化子类的时候同时调用父类的__constrcut(),则可以在子类中使用parent::__construct(). 如果我们写两个类,如下  代码如下 复制代码 class Act

THINKPHP 中关联查询(多表查询)

THINKPHP 中关联查询(多表查询)可以使用 table() 方法或和join方法,请看示例: 1.Table方法:定义要操作的数据表名称,可以动态改变当前操作的数据表名称,需要写数据表的全名,包含前缀,可以使用别名,例如: $Model->Table('think_user user') ->where('status>1') ->select(); $Model->table('think_blog blog,think_type type')->where('