php 两表关联查询,Thinkphp连多表查询,关联2个或多个字段

tp连表查询的问题:a表的user_id关联b表的id,a表的race_id关联c表的race_id,a表的race_id和user_id关联d表的race_id和user_id。4表关联,a表和d表还是关联2个字段。

tp作为国内最优秀的php框架,提供了一种简单的join来关联表。下面是示例代码

php 复制代码
$where = array(

'a.id'=>1,

'b.id'=>1,

);

$result = $this ->join('LEFT JOIN b ON a.user_id = b.id')

->join('LEFT JOIN c ON a.race_id = c.race_id')

->join('LEFT JOIN d a.race_id = d.race_id AND a.user_id = d.user_id')

->where($where)

->select();

当然,这只是一个小例子,where条件中的a.id代表a表中的id字段,b.id同理。 LEFT JOIN就是php中连表查询中常用的,join()可以一直加下去(只要表名对应的字段存在,即a.user_id = b.id,a表中必须有user_id,b表中必须有id,条件才能成立)

大家知道,连表有时候会有重复字段,我的解决方法是使用thinkphp中的field()。例如:

php 复制代码
$result = $this ->join('LEFT JOIN b ON a.user_id = b.id')
->join('LEFT JOIN c ON a.race_id = c.race_id')
->join('LEFT JOIN d a.race_id = d.race_id AND a.user_id = d.user_id')
->where($where)
-> field('a.name as a_name , b.*,c.&,d.*')
->select();

a.name as a_name意思就是把a表中的name字段换成a_name去显示出来。b.*代表的是取b表中的全部数据。

相关推荐
SharpCJ3 小时前
Android 开发者为什么必须掌握 AI 能力?端侧视角下的技术变革
android·ai·aigc
jwn9994 小时前
Laravel6.x核心特性全解析
开发语言·php·laravel
_李小白4 小时前
【OSG学习笔记】Day 38: TextureVisitor(纹理访问器)
android·笔记·学习
JJay.4 小时前
Kotlin 高阶函数学习指南
android·开发语言·kotlin
jinanwuhuaguo4 小时前
截止到4月8日,OpenClaw 2026年4月更新深度解读剖析:从“能力回归”到“信任内建”的范式跃迁
android·开发语言·人工智能·深度学习·kotlin
星辰徐哥5 小时前
5G的行业应用:工业互联网、车联网、智慧医疗中的网络支撑
网络·5g·php
JJay.5 小时前
Android Kotlin 协程使用指南
android·开发语言·kotlin
BLUcoding6 小时前
Android 布局介绍
android
三道渊6 小时前
进程通信与网络协议
开发语言·数据库·php
summerkissyou19876 小时前
android-蓝牙-状态和协议值总结及监听例子
android·蓝牙