thinkphp 5中的混合查询
作者:程序员11 时间:2021-12-06 人气:484 QQ交流群\邮箱:1003265987@qq.com1.手册样例thinkphp 5.0
Db::table('think_user') ->where('name',['like','thinkphp%'],['like','%thinkphp']) ->where(function($query){
$query->where('id',['<',10],['>',100],'or'); }) ->select();
相当于sql语句:
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) AND ( `id` < 10 or `id` > 100 )
2.手册样例 thinkphp 5.1
Db::table('think_user') ->where('name', ['like', 'thinkphp%'], ['like', '%thinkphp']) ->where(function ($query) {
$query->where('id', ['<', 10], ['>', 100], 'or'); }) ->select();
相当于sql语句:
SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `name` LIKE '%thinkphp' ) AND ( `id` < 10 or `id` > 100 )
3.function($query)传参数用use()
样例:
Db::table('think_user')
->where($where)
->where(function($query) use($group_id){
$query->where(Db::raw("group_id is null or group_id = '$group_id'")); //Db::raw()可以直接写sql语句查询
})
->select();
Db::table('think_user')
ThinkPHP中关联查询(即多表联合查询)可以使用 table() 方法或和join方法,具体使用如下例所示:
1、原生查询示例:
$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);
2、join()方法示例:
$user = new Model('user');
$list = $user->join('RIGHT JOIN user_profile ON user_stats.id = user_profile.typeid' );
Thinkphp使用join联表查询的方法
$user = M('user');
$b_user = M('b_user');
$c_user = M('c_user');
$list = $user->alias('user')->where('user.user_type=1')
->join('b_user as b on b.b_userid = user.user_id')
->join('c_user as c on c.c_userid = b.b_userid')
->order('b.user_time')
->select();
$user 表的 user_id 等于$b_user表的b_userid;
$c_user表的 c_userid 等于$b_user表的b_userid;
3、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();
欢迎阅读本文章,觉得有用就多来支持一下,没有能帮到您,还有很多文章,希望有一天能帮到您。