数据表结构
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`phone` varchar(255) DEFAULT NULL,
`sortid` varchar(255) DEFAULT NULL COMMENT '地区id',
`website` varchar(255) DEFAULT NULL COMMENT '网站id',
`number` int(11) DEFAULT NULL COMMENT '群id',
`times` varchar(255) DEFAULT NULL COMMENT '进群时间',
`isdel` int(11) DEFAULT '1',
`wzmc` int(255) DEFAULT NULL COMMENT '网站id',
`sortpath` varchar(255) DEFAULT NULL COMMENT '路径',
`status` tinyint(4) DEFAULT NULL COMMENT '状态值',
`category` varchar(20) DEFAULT NULL COMMENT '类别',
`grade` varchar(20) DEFAULT NULL COMMENT '等级',
`area` int(11) DEFAULT NULL COMMENT '地区',
Index控制器
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use app\controller\UserModel;
class Index extends BaseController
{
}
增
public function add()
{
/*$data = [
'phone' => time(),
'sortid' => time(),
'website' => time(),
'number' => time(),
'times' => time(),
'isdel' => time(),
'wzmc' => time(),
'sortpath' => time(),
'status' => mt_rand(0,2),
'category' => time(),
'grade' => time(),
];*/
// Db::name('user')->insert($data); //常规插入
// echo $id = Db::name('user')->insertGetId($data); //在插入数据的基础上返回 插入后的主键id
/*$data = [
'phone' => time(),
'sortid' => time(),
'website' => time(),
'number' => time(),
'times' => time(),
'isdel' => time(),
'wzmc' => time(),
'sortpath' => time(),
'status' => mt_rand(0,2),
'category' => time(),
'grade' => time(),
'area' => time(),
'pppp' => '这是不存在的字段' //这是数据表中不存在的ppp字段
];*/
// Db::name('user')->strict(false)->insert($data); //使用strict方法将关闭字段严格检查,不存在的字段将不会对数据库进行操作,实现正常插入
/*$data = [
'phone' => '要被替换',
'sortid' => '要被替换',
'website' => '要被替换',
'number' => mt_rand(1,100),
'times' => '要被替换',
'isdel' => mt_rand(0,1),
'wzmc' => mt_rand(1000,1000000),
'sortpath' => '要被替换',
'status' => mt_rand(0,1),
'category' => '要被替换',
'grade' => '要被替换',
'area' => mt_rand(0,1),
'id' => 1
];*/
/*
replace方法用于配合insert或者下面的insertAll一起配套使用
当不传入主键时,自然插入数据
当传入主键时,replace将根据主键去查找该记录
找到时:将对数据进行所整行(有字段)更新;当有未传入某个字段的值时,该字段值将被更新未NULL;这一点和update区别是update可以单个字段更新,不影响整行
未找到时:自然插入数据
*/
// Db::name('user')->replace()->insert($data);
$data = [
[
'phone' => '要被替换',
'sortid' => '要被替换',
'website' => '要被替换',
'number' => mt_rand(1,100),
'times' => '要被替换',
'isdel' => mt_rand(0,1),
'wzmc' => mt_rand(1000,1000000),
'sortpath' => '要被替换',
'status' => mt_rand(0,1),
'category' => '要被替换',
'grade' => '要被替换',
'area' => mt_rand(0,1),
],
[
'phone' => '要被替换',
'sortid' => '要被替换',
'website' => '要被替换',
'number' => mt_rand(1,100),
'times' => '要被替换',
'isdel' => mt_rand(0,1),
'wzmc' => mt_rand(1000,1000000),
'sortpath' => '要被替换',
'status' => mt_rand(0,1),
'category' => '要被替换',
'grade' => '要被替换',
'area' => mt_rand(0,1),
],
];
Db::name('user')->insertAll($data); //批量插入
}
删
public function del()
{
// $id = 2;
// Db::name('user')->delete($id); //简洁方式 根据单个主键删除单条数据
// Db::name('user')->where('id',$id)->delete(); //常规方式 根据单个主键删除单条数据
$ids = [644163, 644164 , 644165];
Db::name('user')->delete($ids); //根据多个主键删除多条数据
Db::name('user')->whereIn('id',$ids)->delete($ids); //常规方式 根据多个主键删除多条数据
}
改
public function edit()
{
$data = [
'website' => time(),
'number' => time(),
'times' => time(),
'isdel' => time(),
'wzmc' => time(),
'sortpath' => time(),
'status' => mt_rand(0,2),
'category' => time(),
'grade' => time(),
'area' => time(),
'id' => '644169'
];
// Db::name('user')->update($data); // 简洁方式 带主键id进行更新
// Db::name('user')->where('id',$data['id'])->update($data); //条件判断 进行更新
Db::name('user')->inc('phone',106)->dec('sortid',300)->update($data); //在更新的基础上,对其余额外的字段进行数值的加减运算;每次更新将对phone字段进行累加106,对sortid字段进行累减300
}
查
public function select()
{
// $user = Db::table('tp_user')->select(); //查多条
// $user5 = Db::table('tp_user')->where('id','In',[57,58,59,60])->select(); //查符合条件的多条
// $user2 = Db::table('tp_user')->where('id',60)->value('website'); //查某条数据的单个字段
// $user3 = Db::table('tp_user')->where('id',60)->find(); //查单条
// $user4 = Db::table('tp_user')->find(60); //简洁方式 传入主键查单条
// var_dump($user,$user2,$user3,$user4,$user5);
/*
将数据库大量的数据分批查询,根据 字段create_time 进行倒叙查询,每次查询2条,每次可以处理两条
适用于命令行操作批处理数据库的数据,不适合WEB(浏览器)访问处理大量数据,例如可以在命令行下每次更新1000个人的积分记录
*/
/*$handleCount = 2;
Db::table('tp_user')->chunk(2, function($users) {
foreach ($users as $user) {
dump($user['id']);
// 这里可以做一些逻辑操作,例如更新数据
}
echo '-----本次查询与下次查询的的分隔符-----';
},'create_time','desc');*/
/*
游标查询
利用了PHP的生成器特性,可以减少大量数据查询的内存开销问题
解决了查询大量数据一次性加载到内存被撑爆的问题
但依旧不能解决大量数据处理超时问题
*/
// $user= Db::table('tp_user')->cursor();
// dump($user);
// foreach ($user as $key => $value) {
// dump($value['wzmc']);
// }
$res3 = Db::name('user')->field('id')->select(); //只查询id列字段
/*
字段排除
查询数据表中除了id列字段外的所有字段值
在thinkphp6以下版本时;写法是:Db::name('user')->field('id',true)->select();
*/
$res4 = Db::name('user')->withoutField('id')->select();
dd($res3,$res4);
}