【ThinkPHP】ThinkPHP5 常用数据库查询语句

来源:我的博客站 OceanicKang |《【ThinkPHP】ThinkPHP5 常用数据库查询语句》

tp_data 数据表

idnamestatus
3thinkphp1
4thinkphp1
5thinkphp1
6thinkphp1
7777777777771
8thinkphp1
9thinkphp1
10thinkphp1
11thinkphp1
12111127
13333127
141111127
15333127
161111127
173333127

value()

$name = Db::name('data')
		-> where('id', 16)
		-> value('name');
print_r($name);

// 获取 tp_data 数据表中 id = 16,name 字段的值,并打印
// 结果:1111

/** 原生sql语句
>Prepare SELECT `name` FROM `tp_data` WHERE `id` = ? LIMIT 1
>Execute SELECT `name` FROM `tp_data` WHERE `id` = 16 LIMIT 1
*/

column()

获取一列满足条件的数据

$list = Db::name('data)
		-> where('status', 1)
		-> column('name');
print_r($list);

// 从 tp_data 数据表获取一列 status = 1 的 name 字段值
/** 结果:
Array(
  [0] => thinkphp
  [1] => thinkphp
  [2] => thinkphp
  [3] => thinkphp
  [4] => 7777777777
  [5] => thinkphp
  [6] => thinkphp
  [7] => thinkphp
  [8] => thinkphp
)
*/

获取一列满足条件的数据,并以id值为键名

$list = Db::name('data)
		-> where('status', 1)
		-> column('name', 'id');
print_r($list);

// 从 tp_data 数据表获取一列 status=1 的 name 字段值集合
/** 结果:
Array(
  [3]  => thinkphp
  [4]  => thinkphp
  [5]  => thinkphp
  [6]  => thinkphp
  [7]  => 7777777777
  [8]  => thinkphp
  [9]  => thinkphp
  [10] => thinkphp
  [11] => thinkphp
)
*/

获取以id为键名的数据集

$list = Db::name('data')
    -> where('status', 1)
    -> column('*', 'id');
print_r($list);

// 从 tp_data 数据表获取一列 status=1 的数据集
/** 结果:
Array(
  [3] => Array(
        [id] => 3
        [name] => thinkphp
        [status] => 1
      )
  [4] => Array(
        [id] => 4
        [name] => thinkphp
        [status] => 1
      )
  [5] => Array(
        [id] => 5
        [name] => thinkphp
        [status] => 1
      )
  ...
)
*/

聚合查询

  • count
  • max
  • min
  • avg
  • sum

统计 data 表的数据

$count = Db::name('data')
		-> where('status', 1)
		-> count();
echo $count;

// 结果:9

统计 data 表的最大 id

$max = Db::name('data')
		-> where('status', 1)
		-> max('id);
echo $max;
// 结果:11

简单查询

$result = Db::name('data')
		-> where("id > :id and name like :name",
			[
				'id' => 10,
				'name' => "%php%"
			])
		-> select();
print_r($result);

/** 结果:
Array(
  [0] => Array(
          [id] => 11
          [name] => thinkphp
          [status] => 1
      )
)
*/

/** 原生sql语句:
>Prepare SELECT * FROM `tp_data` WHERE (id > ? and name like ?)
>Execute SELECT * FROM `tp_data` WHERE (id > '10' and name like '%php%')
*/

日期查询

  • 日期类型int,时间戳格式

查询时间大于 2016-1-1 的数据

$result = Db::name('users')
		-> whereTime('reg_time', '>', '2016-1-1')
		-> select();
print_r($result);

/** 原生sql语句:
>Prepare SELECT * FROM `tp_users` WHERE `reg_time` > ?
>Execute SELECT * FROM `tp_users` WHERE `reg_time` > 1451577600
*/

查询本周

$result = Db::name('users')
		-> whereTime('reg_time', '>', 'this week')
		-> select();
print_r($result);

// 从本周星期一开始

查询最近两天添加的数据

$result = Db::name('users')
		-> whereTime('reg_time', '>', '-2 days')
		-> select();
print_r($result);

查询创建时间在 2016-1-1 ~ 2017-7-1 的数据

$result = Db::name('users')
		-> whereTime('reg_time', 'between', ['2016-1-1', '2017-7-1'])
		-> select();
print_r($result);

/** 原生sql语句:
>Prepare SELECT * FROM `tp_users` WHERE `reg_time` BETWEEN ? AND ?
>Execute SELECT * FROM `tp_users` WHERE `reg_time` BETWEEN 1451577600 AND 1483200000
*/

查询今天的数据

  • 昨天:yesterday
  • 本周:week
  • 上周:last week
$result = Db::name('users')
		-> whereTime('reg_time', 'today')
		-> select();
print_r($result);

分块查询

Db::name('data')
	-> where('status', '>', 0)
	-> chunk(2, function($list) {
    	foreach($list as $data) {
        	//处理2条记录
    	}
	});

/** 原生sql语句:
>Prepare SELECT * FROM `tp_data` WHERE `status` > ? ORDER BY `id` asc LIMIT 2
>Execute SELECT * FROM `tp_data` WHERE `status` > 0 ORDER BY `id` asc LIMIT 2
>Close stmt
>Prepare SELECT * FROM `tp_data` WHERE `status` > ? AND `id` > ? ORDER BY `id` asc LIMIT 2
>Execute SELECT * FROM `tp_data` WHERE `status` > 0 AND `id` > 4 ORDER BY `id` asc LIMIT 2
>Close stmt
>Prepare SELECT * FROM `tp_data` WHERE `status` > ? AND `id` > ? ORDER BY `id` asc LIMIT 2
>Execute SELECT * FROM `tp_data` WHERE `status` > 0 AND `id` > 6 ORDER BY `id` asc LIMIT 2
>Close stmt
...
>Prepare SELECT * FROM `tp_data` WHERE `status` > ? AND `id` > ? ORDER BY `id` asc LIMIT 2
>Execute SELECT * FROM `tp_data` WHERE `status` > 0 AND `id` > 16 ORDER BY `id` asc LIMIT 2
>Close stmt
>Prepare SELECT * FROM `tp_data` WHERE `status` > ? AND `id` > ? ORDER BY `id` asc LIMIT 2
>Execute SELECT * FROM `tp_data` WHERE `status` > 0 AND `id` > 17 ORDER BY `id` asc LIMIT 2
>Close stmt
*/

改进

$p = 0;
do {
  $result = Db::name('data') -> limit($p, 2) -> select();
  $p += 2;
  //处理数据
} while(count($result) > 0);
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值