<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function index($name = 'world')
{
$this->assign('name', $name);
$db = db('test');
// $res=Db::name('test')->select();
// 或
// $res=Db::table('test')->select();
// 或
// $res=db('test')->select();
// $res=Db::query('select id , data from tp_5_test');
// select 返回所有记录
// $res=Db::table('tp_5_test')->select();
// $res=Db::table('tp_5_test')->find();
// 返回单个字段数据
// $res=Db::table('tp_5_test')->value('data');
// 返回一组字段数据,可以存在第二个参数,并以第二个参数为Key输出
// $res=Db::table('tp_5_test')->column('data');
// 插入数据 insert();
// insertGetId();此方法运行后,返回主键id
// $res=$db->insertGetId([
// 'name' => 'nono',
// 'data' =>md5('bad')
// ]);
// dump($res);
// $last=db('test')->select();
// dump($last);
// insertAll();插入数组/一组数据,返回插入数据成功的行数
// $data=[];
// for ($i=0;$i<10;$i++){
// $data[]=[
// 'name' =>'yeye'.$i,
// 'data' =>md5('see'.$i)
// ];
// }
// $res=$db->insertAll($data);
// dump($res);
// update() 可以改变多字段信息,返回影响行数
// $res= $db->where([
// 'id'=>1
// ])->update([
// 'name'=>'abc',
// 'data'=>md5('ssss')
// ]);
// setField(); 每次变更一个字段信息,返回影响行数
// $res = $db->where([
// 'id'=>1
// ])->setField('name','qwe');
// setInc(a,b); 每次执行(字段)都自增. 默认不写第二参数自增1,第二参数是多少就自增多少。返回影响行数
// $res=$db->where(['id'=>1])->setInc('num');//+1
// $res=$db->where(['id'=>1])->setInc('num',5);//+5
// setDec(); 每次执行都自减.
// $res=$db->where(['id'=>1])->setDec('num');
// $res=$db->where(['id'=>1])->setDec('num',5);
// delete();不添加where条件时,按主键删除时,直接添加参数即可 例:delete(2);
// $res=$db->delete(2);
#条件构造器,条件信息
/* where() whereOr()
* EQ =
* NEQ <>
* LT <
* ELT <=
* GT >
* EGT >=
* BETWEEN BETWEEN * AND *
* NOTBETWEEN NOTBETWEEN * AND *
* IN IN (*,*)
* NOTIN NOT IN (*,*)
*/
// $sql = $db->where('id','eq',1)->buildSql();
#链式操作
/*
*
* 指定排序 order('id','desc') 或者 order(['id'=>'desc','create_time'=>'desc'])
*
* 指定分页 page(page,listRow); page:页数 , listRow:每页显示行数
*
*
*
*
*/
$res = $db
->field('data,num')
// ->order('id', 'desc')
// ->limit(3,5)
->group("name")
// ->page(1, 5)
->select();
dump($res);
return $this->fetch();
}
// public function dbTest(){
// $data=Db::table('tp_5_test')->select();
// $this->assign('result',$data);
//
// return $this->fetch('dbTest');
// }
}
where("id",">",10)
field("username,id")
order("id desc")
limit(3,5)//从第三条开始,取5条
page(3,5)//从第三页开始,取5条
select()
// $res = Db::table("tb_name")->select(); //输出所有信息
// $res = Db::table("tb_name")->find(2); //输出一条信息
// $res = Db::table("tb_name")->value("name"); //输出第一条信息的name字段
// $res = Db::table("tb_name")->column("name"); //输出字段名为name的所有信息
// $res = Db::table("tb_name")->where("name","小赵")->select(); //输出name为小赵的信息
// $res = Db::table("tb_name")->where(['age'=>['LT',20]])->select(); //输出age小于20岁的信息
// $res = db("name")->where(['age'=>['LT',20]])->select(); //输出age小于20岁的信息
// $res = Db::name("name")->insert(['name'=>'小陈','age'=>29,'money'=>500000]); //插入一条信息 返回影响行数
// $res = db("name")->insertGetId(['name'=>'小杨','age'=>22,'money'=>800000]); //输出age小于20岁的信息 返回id值 不能被select
// $arr = [
// ['name'=>'小橙','age'=>18,'money'=>5],
// ['name'=>'小昊','age'=>18,'money'=>5],
// ['name'=>'小菌','age'=>18,'money'=>5]
// ];
// $res = db("name")->insertAll($arr); // 返回影响行数
// $res = db("name")->where(["age"=>['=',8]])->update(["age"=>"60"]); // 返回影响行数
// $res = db("name")->where(["id"=>['=',2]])->update(["age"=>20,"money"=>7000000]); // 返回影响行数
// $res = db("name")->where(["age"=>['=',15]])->setField(["age"=>"60"]); // 返回影响行数
// $res = db("name")->where(['name'=>['=','小任']])->setInc("age",50); // 返回影响行数
// $res = db("name")->where(['name'=>['=','小任']])->setDec("age",50); // 返回影响行数
// $res = db("name")->where(['money'=>['=',5]])->delete(); // 返回影响行数
//清空数据表的方法
// $res = db("name")->where("1=1")->delete(); // 返回影响行数
// $res = db("name")->where(["age"=>['in','17,18,19,20']])->select(); // 返回数据列
// $res = db("name")->where("age","EXP",'in (19,20)')->select(); // 返回数据列
// $res = db("name")->where(["money"=>["EGT",5000]])->order("money DESC")->field('money')->select();; // 返回数据列
// $res = db("name")->page(2,2)->select(); //
对sql进行链式操作
使用group 的时候 order是不生效的;
group("`group`"); 用关键字段来排序, 处理关键字段的方法注意!!!
group 有distinct 的功效
$db = Db::name('user1');
#插入数据
$data=[];
for($i=1; $i<21; $i++){
$data[]=[
'username' => " use_{$i}",
'password' => md5("pwd_{$i}}"),
'email' => "em_{$i}123456@qq.com"
];
}
$res = $db->insertAll($data);
#清空数据库
$res= $db->where('1=1')->delete();
#链式操作
$res = Db::table('user1')
->where("id","<","10")
->field("id,username,password")
->page(2,5)
->select();
dump($res);
}
}
常用链式操作
原理:Db类的链式方法返回Db对象,可以继续使用Db对象的这些方法对查询数据进行一些条件构造以及范围的选择和排序等等;
$res=$db
->where('id','>',5) 条件ID>5
->field('username','id') 只搜索username和id两个字段
->order('id DESC') order排序 id DESC id倒序
->limit(3,7) limit截取 3,7 从3开始截取7个
->page(3,5) page(m,n)多用于分页//limit分页limit((m-1)*n,n)== m:当前页数,n:每页多少条数据
->group('`group`') //group是关键字,这里用``进行转义
->select(); select( ); 搜索
var_dump($res);
注意:order对group是不起作用的;就是在执行的group进行分组的时候,并不是在你order排序的基础上进行的;
group('字段'),他会根据字段的值为分类标准进行分类,比如字段值为1的单独查出来,字段值为1的单独查出来;
更加方便的分页功能,所谓链式操作,order field limt 各种SQL关键字的方法化
链式操作。。
alias用于设置当前数据表的别名,便于使用其他的连贯操作例如join方法等。
bind方法用于手动参数绑定,大多数情况,无需进行手动绑定,系统会在查询和写入数据的时候自动使用参数绑定。
cache可以用于select、find、value和column方法,以及其衍生方法,使用cache方法后,在缓存有效期之内不会再次进行数据库查询操作,而是直接获取缓存中的数据,关于数据缓存的类型和设置可以参考缓存部分。
comment方法 用于在生成的SQL语句中添加注释内容
distinct 方法用于返回唯一不同的值
failException设置查询数据为空时是否需要抛出异常,如果不传入任何参数,默认为开启,用于select和find方法
fetchSql用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法
force 方法用于数据集的强制索引操作
group通常用于结合合计函数,根据一个或多个列对结果集进行分组
having用于配合group方法完成从分组的结果中筛选(通常是聚合条件)数据
join用于根据两个或多个表中的列之间的关系,从这些表中查询数据
join通常有下面几种类型,不同类型的join操作会影响返回的数据结果。
• INNER JOIN: 等同于 JOIN(默认的JOIN类型),如果表中有至少一个匹配,则返回行
• LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
• RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
• FULL JOIN: 只要其中一个表中存在匹配,就返回行
limit主要用于指定查询和操作的数量,特别在分页查询的时候使用较多。ThinkPHP的limit方法可以兼容所有的数据库驱动类的。
Lock方法是用于数据库的锁机制,如果在查询或者执行操作的时候使用:就会自动在生成的SQL语句最后加上 FOR UPDATE或者FOR UPDATE NOWAIT(Oracle数据库)
order用于对操作的结果排序。
page是完全为分页查询而诞生的一个人性化操作方法。显而易见的是,使用page方法你不需要计算每个分页数据的起始位置,page方法内部会自动计算
partition 方法用于是数据库水平分表
sequence方法用于pgsql数据库指定自增序列名,其它数据库不必使用
strict方法用于设置是否严格检查字段名,如果开启字段严格检查的话,在更新和写入数据库的时候,一旦存在非数据表字段的值,则会抛出异常
table方法主要用于指定操作的数据表。
union操作用于合并两个或多个 SELECT 语句的结果集。
1. Db类的链式方法会返回一个Db类,我们可以对他继续使用Db链式方法
常用链式操作
原理:Db类的链式方法返回Db对象,可以继续使用Db对象的这些方法对查询数据进行一些条件构造以及范围的选择和排序等等;
$res=$db
->where('id','>',5) 条件ID>5
->field('username','id') 只搜索username和id两个字段
->order('id DESC') order排序 id DESC id倒序
->limit(3,7) limit截取 3,7 从3开始截取7个
->page(3,5) page(m,n)多用于分页//limit分页limit((m-1)*n,n)== m:当前页数,n:每页多少条数据
->group('`group`') //group是关键字,这里用``进行转义
->select(); select( ); 搜索
var_dump($res);
注意:order对group是不起作用的;就是在执行的group进行分组的时候,并不是在你order排序的基础上进行的;
group('字段'),他会根据字段的值为分类标准进行分类,比如字段值为1的单独查出来,字段值为1的单独查出来;
链式操作方法
数据库链式操作
$res = Db:table('imooc_user')
-> where('id', '>', 10)
-> field('username, id')
-> order('id DESC')
// -> LIMIT(3, 5)
// -> page()
-> group() //order不生效
-> select();
dump($req);
常用链式操作
原理:Db类的链式方法返回Db对象,可以继续使用Db对象的这些方法对查询数据进行一些条件构造以及范围的选择和排序等等;
$res=$db
->where('id','>',5) 条件ID>5
->field('username','id') 只搜索username和id两个字段
->order('id DESC') order排序 id DESC id倒序
->limit(3,7) limit截取 3,7 从3开始截取7个
->page(3,5) page(m,n)多用于分页//limit分页limit((m-1)*n,n)== m:当前页数,n:每页多少条数据
->group('`group`') //group是关键字,这里用``进行转义
->select(); select( ); 搜索
var_dump($res);
注意:order对group是不起作用的;就是在执行的group进行分组的时候,并不是在你order排序的基础上进行的;
group('字段'),他会根据字段的值为分类标准进行分类,比如字段值为1的单独查出来,字段值为1的单独查出来;
第一遍出错了。报错信息为
ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'course.imooc_user.group' which is not functionally dependent on columns in GROUP BY group; this is incompatible with sql_mode=only_full_group_by
解决方法参考:https://blog.csdn.net/wangyunfeis/article/details/77911704
链式操作:
<?php namespace app\index\controller; use think\controller; use think\Db; class Index { public function index(){ $db = Db::name('user'); // $data = []; // for ($i=1; $i<21; $i++){ // $data[] = [ // 'username' => "wenco_{$i}", // 'password' => md5("wenco_{$i}"), // 'email' => "wenco_{$i}@qq.com", // 'num' => $i+100 // ]; // } // $res = $db->insertALL($data); $res =Db::table('imooc_user') ->field("username","id","group") ->order('id',DESC) ->limit(3,5)//limit分页limit((m-1)*n,n)=== m:当前页数,n:每页多少条数据 ->page(2,5) ->group("'group'") ->select(); dump($res); } }