003thinkphp 数据库查询及表关联

Posted 陈三

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了003thinkphp 数据库查询及表关联相关的知识,希望对你有一定的参考价值。

$user = M("sysUser");
$list=$user->find();
echo $user->getLastSql();
dump($list);
$user = M("sysDept");
$list=$user->find();
echo $user->getLastSql();
dump($list);
查询结果:
SELECT * FROM `tp_sys_user` LIMIT 1

array(1) {
  [0] => array(5) {
    ["id"] => string(1) "1"
    ["user_name"] => string(6) "陈三"
    ["login_code"] => string(2) "cs"
    ["login_pwd"] => string(6) "123456"
    ["dept_id"] => string(1) "2"
  }
}

SELECT * FROM `tp_sys_dept` LIMIT 1

array(2) {
  [0] => array(3) {
    ["id"] => string(1) "1"
    ["dept_name"] => string(9) "研发部"
    ["remark"] => NULL
  }
  [1] => array(3) {
    ["id"] => string(1) "2"
    ["dept_name"] => string(9) "运营部"
    ["remark"] => NULL
  }
}

 

两表关联(join为关联表,field()指定显示字段):

$list=$user->join(‘tp_sys_dept ON tp_sys_user.dept_id=tp_sys_dept.id‘)
  ->field(‘id‘,‘user_name‘,‘login_code‘,‘dept_id‘,‘dept_name‘)->find();
echo $user->getLastSql();
dump($list);

结果:

SELECT `user_name`,`login_code`,`login_pwd`,`dept_id` FROM `tp_sys_user` INNER JOIN tp_sys_dept ON tp_sys_user.dept_id=tp_sys_dept.id LIMIT 1

array(1) {
  [0] => array(4) {
    ["user_name"] => string(6) "陈三"
    ["login_code"] => string(2) "cs"
    ["login_pwd"] => string(6) "123456"
    ["dept_id"] => string(1) "2"
  }
}

tp_sys_user和tp_sys_dept表都有id列,id列被去掉了;那么尝试给列指定所在表

$list=$user->alias(‘a‘)->join(‘tp_sys_dept b ON a.dept_id=b.id‘)
  ->field(‘a.id‘,‘user_name‘,‘login_code‘,‘dept_id‘,‘dept_name‘)->find();

echo $user->getLastSql();

dump($list);

结果:

SELECT `id`,`user_name`,`login_code`,`login_pwd`,`dept_id` FROM tp_sys_user a INNER JOIN tp_sys_dept b ON a.dept_id=b.id LIMIT 1

bool(false)

 同名列id已经指定了所在表,但不起作用;

 

$list=$user->field(‘a.id,user_name,login_code,dept_id,dept_name‘)
   ->table(‘tp_sys_user a,tp_sys_dept b‘)->where(‘a.dept_id=b.id‘)->find();
echo $user->getLastSql();
dump($list);

结果:

SELECT a.id,`user_name`,`login_code`,`dept_id`,`dept_name` FROM tp_sys_user a,tp_sys_dept b WHERE ( a.dept_id=b.id ) LIMIT 1

array(1) {
  [0] => array(5) {
    ["id"] => string(1) "1"
    ["user_name"] => string(6) "陈三"
    ["login_code"] => string(2) "cs"
    ["dept_id"] => string(1) "2"
    ["dept_name"] => string(9) "运营部"
  }
}

正常,尝试把where条件直接放在table中

$list=$user->field(‘a.id,user_name,login_code,dept_id,dept_name‘)
   ->table(‘tp_sys_user a,tp_sys_dept b where a.dept_id=b.id‘)->find();//将where条件放在table()中
echo $user->getLastSql();
dump($list);

结果:

SELECT a.id,`user_name`,`login_code`,`dept_id`,`dept_name` FROM tp_sys_user a,tp_sys_dept b where a.dept_id=b.id LIMIT 1

array(1) {
  [0] => array(5) {
    ["id"] => string(1) "1"
    ["user_name"] => string(6) "陈三"
    ["login_code"] => string(2) "cs"
    ["dept_id"] => string(1) "2"
    ["dept_name"] => string(9) "运营部"
  }
}

where条件直接在table()中也可以;但这样只能查内连接;

既然语句可以放在table()中,尝试用left join(左外连接)
$list=$user->field(‘a.id,user_name,login_code,dept_id,dept_name‘)
   ->table(‘tp_sys_user a left join tp_sys_dept b on a.dept_id=b.id‘)->find();
echo $user->getLastSql();
dump($list);

结果:

SELECT a.id,`user_name`,`login_code`,`dept_id`,`dept_name` FROM tp_sys_user a left join tp_sys_dept b on a.dept_id=b.id LIMIT 1

array(1) {
  [0] => array(5) {
    ["id"] => string(1) "1"
    ["user_name"] => string(6) "陈三"
    ["login_code"] => string(2) "cs"
    ["dept_id"] => string(1) "2"
    ["dept_name"] => string(9) "运营部"
  }
}

可以在table()中进行外连接;

 

传参查询:
$loginCode和$loginPwd为参数

$user->where("login_code=‘{$loginCode}‘ and login_pwd=‘{$loginPwd}‘")->find();

更多表查询内容,及常规用法请参考Thinkphp手册

以上是关于003thinkphp 数据库查询及表关联的主要内容,如果未能解决你的问题,请参考以下文章

thinkphp5 怎么进行跨库关联查询

thinkphp在关联模型中三表级联查询

thinkphp5关联查询主表的每条数据在附表关联表中的最新的那条数据(因为附表里面关联的字段数据有多条)

thinkphp6 关联模型如何查询已经软删除的数据

thinkphp tp5多表查询

ThinkPHP求助,关联模型查询如何跨表多条件查询