1、当数据库里某个字段是存的多个值用逗号拼接的,类似于“1,2,3,4,5”;如果你想通过sql查这个字段包含1的数据,怎么查?我来告诉你。tp5.1的框架里面的where条件是这样写的:
点击查看代码,控制器先use think\Db;
$where[] = [‘‘,‘exp‘,Db::raw("FIND_IN_SET(".$param[‘field‘].",type)")];
注:其中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($informations, array(‘\app\admin\model\QuestionLibraryList‘,‘cmp_sequence_score‘));
//模型里的方法
public static function cmp_sequence_score($a, $b)
{
if ($a[‘is_home_top‘] == $b[‘is_home_top‘]) {
return ($a[‘update‘] > $b[‘update‘]) ? -1 : 1;
}
return ($a[‘is_home_top‘] > $b[‘is_home_top‘]) ? -1 : 1;
}
注:\app\admin\model\QuestionLibraryList 是模型路径 ,cmp_sequence_score是排序的方法,$informations是要排序的数组,$a和$b是默认参数,不需要变,“is_home_top”是第一个排序值,“update”是第二个排序值。
4、sql里使用if判断
点击查看代码
/**
* @param $db 数据库名
* @param $table 表名
* @param $field 字段
* @param $where 条件
* @param $order 排序
* @param int $limit 取得数据条数
* @param int $start 数据取得起始位置
* @param string $keyField 把返回结果的指定的字段值作为二维数组的key
*/
public static function getRecord($db, $table, $field = ‘*‘, $where = ‘‘, $limit = 1, $start = 0, $order = ‘‘, $group = ‘‘, $keyField = ‘‘)
{
if ($limit == 1) {
$data = Db::connect($db)
->table($table)
->field($field)
->where($where)
->group($group)
->order($order)
->find();
} else {
if ($limit == 0) {
$data = Db::connect($db)
->table($table)
->field($field)
->where($where)
->group($group)
->order($order)
->select();
} else {
$data = Db::connect($db)
->table($table)
->field($field)
->where($where)
->group($group)
->order($order)
->limit($start, $limit)
->select();
}
$ret = [];
if (!empty($keyField) && !empty($data)) {
foreach ($data as $k => $v) {
$ret[$v[$keyField]] = $v;
}
$data = $ret;
}
}
return $data;
}
$is_read = Main::getRecord(‘db_grid_game‘,‘t_notice_bind_user‘,‘count(if(is_read = 1,true,null)) as count,notice_id‘,‘‘,0,‘‘,‘‘,‘notice_id‘,‘notice_id‘);
获取is_read等于1的数据数量。
5、处理返回数据兼容utf-8格式的代码
点击查看代码
if (!headers_sent()) {
header(‘Content-Type:application/json;charset=utf-8‘);
}
6、数据库查询优化,缩短接口请求时间
点击查看代码1游标
$cursor = Db::connect(‘db_grid‘)
->table(‘t_event_log‘)
->field(‘count(event_log_id) as count,appraise‘)
->where($where)
->group(‘appraise‘)
->cursor();
foreach($cursor as $cursor_key => $cursor_value){
$estimer_count[$cursor_key] = $cursor_value;
}
2分块
$master = array();
$chunk = Db::connect(‘db_grid‘)
->table(‘t_event‘)
->field(‘event_id, status‘)
->where($map)
->chunk(10000, function ($events) use (&$master) {
foreach ($events as $event_value) {
$master[] = $event_value;
}
});
注:$events是所查出的数据库数据,再按块存到$master里,再返回$master;
结束语:好了,今日知识点就分享到这里。谢谢大家支持。