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手册

时间: 2024-08-08 09:42:20

003thinkphp 数据库查询及表关联的相关文章

常用数据库查询判断表和字段是否存在的SQL

常用数据库查询判断表和字段是否存在的SQL(如果结果为1表示存在,为0表示不存在) 1.MSSQL Server 表: SELECT COUNT(*) FROM dbo.sysobjects  WHERE name= 'table_name'; 字段: SELECT COUNT(*) FROM syscolumns  WHERE id=object_id('table_name') AND name= 'column_name'; 2.My SQL 表: SELECT COUNT(*) FROM

Hibernate原生SQL查询多表关联,SQL语句要注意的问题

Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Question 和 Answer分别对应数据表 question 和answer. 并且表 question 和answer 的字段大部分都一样,字段数目也一样. 执行如下的操作: 1> 使用hibernate 使用原生SQL查询, Query q = session.createSQLQuery(sql).

Oracle数据库查询锁表

--查询锁表 select       sess.sid,       sess.serial#,       lo.oracle_username,       lo.os_user_name,       ao.object_name,       ao.object_type,    lo.locked_mode,    ao.status    from       v$locked_object lo,       dba_objects     ao,       v$session

oracle数据库查询锁表与解锁语句

今天要删除一个失效的物化视图的时候:老是删除不掉:经理说是锁表了:然后百度了一下 下面是 查询 锁表 和 如何解锁 --查询现在的锁SELECT l.session_id sid, s.serial#, l.locked_mode,l.oracle_username, l.os_user_name,s.machine, s.terminal, o.object_name, s.logon_time FROM v$locked_object l, all_objects o, v$session

数据库查询锁表以及解锁表的sql

之前程序运行的时候,突然发生页面卡死,后台不报错的现象,经过排查是数据库表被锁死,下面的sql是查询被锁的表,以及对应的解锁sql: select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id; select b.username,b.sid,b.serial#,logon_time from v$locke

数据库几种表关联的汇总

添加测试表和一些测试数据. ----------t1----------- CREATE TABLE `t1` ( `id` int(20) NOT NULL default '0', `field01` varchar(100) default NULL, `field02` varchar(100) default NULL, PRIMARY KEY  (`id`) ) 数据: ----------t2----------- CREATE TABLE `t2` (  `id` int(20)

Oracle 数据库(oracle Database)Select 多表关联查询方式

Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名2>[,…] [WHERE <筛选择条件表达式>] [GROUP BY <分组表达式> [HAVING<分组条件表达式>]] [ORDER BY <字段>[ASC | DESC]] 语句说明: []方括号为可选项 [GROUP BY <分组表达式&g

2015-10-19 SQL(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)

1.认识数据库并新建: 1)打开数据库,连接到服务器. 2)服务里类型不用管. 3)服务器名称:打个点“.”表示服务器在本地计算机,如果是托管在别人的服务器上,就输入服务器IP地址. 4)身份验证:如果是windows身份验证,就需要有管理员权限.一般托管在别人的服务器上,(包括正常情况下),都是用SQL身份验证,需要输入sa和密码(密码就是安装时让输入的密码). 2.  建立数据库: 在建立数据库名称时(各种名称时),都遵守一个命名规则: 1)用英文命名 2)每个单词的首字母大写(驼峰原则:首

Yii2中多表关联查询(with、join、joinwith)

表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order         (id  order_name   customer_id   book_id) 图书表Book          (id  book_name    author_id) 作者表Author        (id  author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer ex