THINKPHP 中关联查询(多表查询)可以使用 table() 方法或和join方法,请看示例:
1、table()
$list = $user->table('user_status stats, user_profile profile')->where('stats.id = profile.typeid')->field('stats.id as id, stats.display as display, profile.title as title,profile.content as content')->order('stats.id desc' )->select();
2、join() $user = new Model('user');
$list = $user->join('RIGHT JOIN user_profile ON user_stats.id = user_profile.typeid' );
3、原生查询
$Model = new Model(); $sql = 'select a.id,a.title,b.content from think_test1 as a, think_test2 as b where a.id=b.id '.$map.' order by a.id '.$sort.' limit '.$p->firstRow.','.$p->listRows; $voList = $Model->query($sql);
关联查询 :
文章表tp_article
CREATETABLE`tp_article`(`id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT'文章ID',`cid`smallint(5)unsignedNOTNULLDEFAULT'1'COMMENT'分类ID',`title`varchar(255)NOTNULLDEFAULT''COMMENT'标题',`content`longtextCOMMENT'内容', PRIMARYKEY(`id`))ENGINE=MyISAM AUTO_INCREMENT=4DEFAULTCHARSET=utf8COMMENT='文章表';
文章分类表tp_cate
CREATETABLE`tp_cate`(`id`int(10)unsignedNOTNULLAUTO_INCREMENTCOMMENT'分类ID',`pid`int(10)unsignedNOTNULLDEFAULT'0'COMMENT'上级分类ID',`name`varchar(50)NOTNULLCOMMENT'分类名称', signedNOTNULLDEFAULT'0'COMMENT'排序', PRIMARYKEY(`id`),UNIQUEKEY`name`(`name`)USINGBTREE)ENGINE=MyISAM AUTO_INCREMENT=9DEFAULTCHARSET=utf8COMMENT='分类表';
查询语句总结
1.JOIN查询
INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
$resul=Db::table('tp_Article') ->join('tp_cate','tp_article.cid=tp_cate.id') ->select();//完整sql语句 SELECT * FROM `tp_Article` INNER JOIN `tp_cate` ON `tp_Article`.`cid`=`tp_cate`.`id`
2.distinct查询
用于返回唯一不同的值
$result= Db::table('tp_Article')->distinct(true)->field('title')->select();//完整sql语句
SELECT DISTINCT `title` FROM `tp_Article`
3.fetchSql查询
用于直接返回SQL语句
$result = Db::table('tp_Article')->fetchSql(true)->find(1);输入 string(53)"SELECT * FROM `tp_Article` WHERE `id` = 1 LIMIT 1 "
4.getTableInfo查询
可以获取表信息,信息类型 包括 fields,type,bind,pk,
result= Db::getTableInfo('tp_Article');//完整sql语句 SHOW COLUMNS FROM `tp_Article`
5.view视图查询
视图查询可以实现不依赖数据库视图的多表查询,并不需要数据库支持视图
result= Db::view('tp_Article',['id'=>'aid','cid','title'])->view('tp_cate','id,pid,name','tp_cate.id=tp_Article.cid','LEFT')->select();