1、当数据库里某个字段是存的多个值用逗号拼接的,类似于“1,2,3,4,5”;如果你想通过sql查这个字段包含1的数据,怎么查?我来告诉你。tp5.1的框架里面的where条件是这样写的:
$where[] = ['','exp',Db::raw("FIND_IN_SET(".$param['field'].",type)")];
注: 控制器先use think\Db,其中field是传过来的值,type是数据库里的字段名。
2、通过某个字段给数组排序,如果不方便用sql排序的话可以用这个。
$last_names = array_column($userData,'patrol'); array_multisort($last_names,SORT_DESC,$userData);
注:array_column()函数是取出数组中的的"patrol"(自定义字段)一列,然后通过array_multisort()函数排序。SORT_DESC倒序排,$userData是要排序的数组。
3、通过两个字段给数组排序,如果不方便用sql排序的话可以用这个
点击查看代码
//控制器里的代码
- usort($list, array('\app\admin\model\Ceshi','order
- _sort'));
//模型里的方法
- public static function order_sort($a, $b){
- if ($a['status'] == $b['status']) {
- return ($a['number'] > $b['number']) ? -1 : 1;
- }
- return ($a['status'] > $b['status']) ? -1 : 1;
- }
注:\app\admin\model\Ceshi是模型路径 ,order_sort是排序的方法,$list是要排序的数组,$a和$b是默认参数,不需要变,“status”是第一个排序值,“number”是第二个排序值。
4、数据库查询优化,缩短接口请求时间
1游标
$cursor = Db::connect('库名')
->table('表名')
->field('count(查询的字段) as count,字段')
->where($where)
->group('分组的字段')
->cursor();
foreach($cursor as $cursor_key => $cursor_value){
$estimer_count[$cursor_key] = $cursor_value;
}
2分块
$master = array();
$chunk = Db::connect('库名')
->table('表名')
->field('字段1, 字段2')
->where($map)
->chunk(10000, function ($events) use (&$master) {
foreach ($events as $event_value) {
$master[] = $event_value;
}
});