惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

U
Unit 42
C
Cybersecurity and Infrastructure Security Agency CISA
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Know Your Adversary
Know Your Adversary
S
Securelist
I
Intezer
AWS News Blog
AWS News Blog
L
LINUX DO - 热门话题
P
Privacy International News Feed
Recent Announcements
Recent Announcements
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Attack and Defense Labs
Attack and Defense Labs
N
News and Events Feed by Topic
The GitHub Blog
The GitHub Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Schneier on Security
Schneier on Security
N
Netflix TechBlog - Medium
爱范儿
爱范儿
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
Hacker News: Ask HN
Hacker News: Ask HN
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
Blog — PlanetScale
Blog — PlanetScale
WordPress大学
WordPress大学
S
Secure Thoughts
K
Kaspersky official blog
N
News | PayPal Newsroom
O
OpenAI News
Last Week in AI
Last Week in AI
C
Check Point Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cyberwarzone
Cyberwarzone
Application and Cybersecurity Blog
Application and Cybersecurity Blog
T
Tor Project blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
D
Docker
Hugging Face - Blog
Hugging Face - Blog
T
Threat Research - Cisco Blogs
Cisco Talos Blog
Cisco Talos Blog
The Register - Security
The Register - Security
博客园 - 司徒正美
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
P
Palo Alto Networks Blog

遐说

2026第一场日出日落-黄山 [徒步]宁波九龙爱心线 [徒步]仙居公盂徒步+丽人谷溯溪(多图) 文献引用批量标注蓝色-Zotero/EndNote [出差]内蒙草原风光 [徒步]浙东小九寨 [徒步]西湖小猫线 微软Office365家庭版拼车5年180 2024浏阳跨年烟火 一路向北-广西 落日余晖——武汉东湖 博士论文盲审通过 青海出差 我开盒了我自己 hexo-butterfly+artalk无法显示文章PV浏览次数 记某站字体混淆解析方案 记第一次进藏 2024川西大环线 Python读取NetCDF文件-裁剪&计算 2024武汉东湖樱花园 zotero批量修改条目语言解决”等”和”et al”混排问题 torch_geometric_temporal安装报错找不到to_dense_adj 武汉冻雨&乡村春节 云南镇雄县凉水村滑坡:卫星影像解析 博客聚合平台RSS订阅-BlogFinder&博友圈&十年之约 腾讯云CDN正式取消免费10G流量包 2023跨年闲逛武汉 观感|小米SU7技术发布会 【留痕】解密微信聊天记录工具:年度报告、聊天导出一键搞定! 小米电脑管家 vs. MIUI+: 手机与PC协同体验大比拼! Waline私有化部署(Docker+VPS) rclone数据同步使用记录(OneDrive+COS+AList) 科研绘图工具 秋意渐浓 Docker buildx交叉编译Python记录 Word分章节图片公示编号方法 Lightroom+Google Map生成个人足迹 评论|如何看待面青地项目允许博士后变更依托单位 Memos添加utterances评论区 收到明信片啦! [Adobe]Your Adobe app is not genuine解决方案-Clash版 尝试配置PicGo-Core日志输出等级 巴东三峡巫峡长 摄影|东湖绿道 旅行|彩云之南 超实用的铁路地图网站 新冠首阳 树莓派netplan连接开放网络(无密码WIFI) 周末|流浪地球2|维也纳展映 维也纳黄昏&夜景 Sony A7M4/M3欧版解锁多国语言 GRASS斜坡单元分割插件(r.slopeunits) windows移植方案 周末|Prater公园|夜景 快乐五一|布拉格Praha 周末|Melk小镇一日游 CDN流量太贵?图床图片批量压缩替换 维也纳|生活感受|交通|物价|通货膨胀 GitHub Remark|给Gay Hub的小伙伴加备注 周末自制烤冷面-不想干活 布达佩斯|匈牙利游记(多图) Notion2Markdown联动发布Hexo博客-自动化部署方案 SPI/TWI水文参数计算公式-ArcGIS Pro 【再见】难得是欢聚, 最是离别多 拯救者R9000P氮化镓电源适配器测评 今天你的华为P30无限重启了吗? pyTranscriber字幕生成软件(带代理版本) Adobe Illustrator错误代码160解决方案 EndNote导入PDF文件关联(SCI-RIS-Helper)插件 ZED-F9PK4 RTK GNSS模块使用指南 pyeemd安装教程--win10 wsl + ubuntu 樱花草 - 小学回忆 咸九高速-幕阜山扶贫攻坚重点项目 NXP i.MX6ULL平台Nodejs & npm 安装教程 全国分省12.5米DEM数字高程数据(ALOS 12.5m)下载 2018&2010全国四级行政区划(省-市-区/县-街道/乡镇)c 全国/湖南省/浙江省水文监测站基本数据&湖北省水文观测站历史数据 天舟二号发射成功 解决方案:Grammarly for Word 无法使用 SDZM: Software for determining shear failure regions of rock joints CNKI知网油猴插件-一键导入Endnote&下载PDF RSS 订阅地大新闻 - CUG News Word 公式字体替代方案 ArcGIS License Manager 无法启动 - Sorry, this application cannot run under a virtual machine html table 批量转 Excel(xlsx) ImageColorAnalysisTool-图像颜色分析工具-Matlab GUI版 matlab柱状图(bar)转折线图(line)方案 图像主要颜色分析工具(pyImageColorAnalysisTool) 科研资料备份同步方案(FreeFileSync) 海量文献自定义格式整理方法(EndNote) CUG校外访问内网网站方法(官方VPN) 通过三个点绘制三维圆弧-python 记挖竹笋 日常实用小软件 长江流域三峡库区水情水位信息获取 EndNote导入文献期刊名-J无法识别解决方案 pymongo 使用记录 Redis学习记录 Laravel 5.6 学习记录 文件名批量提取工具介绍及使用教程 win7x64 下 redis 的安装
CI框架常用数据库操作技巧
Dorad · 2018-01-28 · via 遐说

发表于|更新于|编程PHP

|总字数:980|阅读时长:4分钟|浏览量:|

¶前言

近期在CI框架下开发了多个项目(准确说是接盘哈哈),在增改删查中也学习了不少的小技能~
留下以后备查~

¶数据库

增改删查作为最基本的数据库操作,写起来代码冗余。等我琢磨一下看能不能封装一层 Model ,减去这些冗余的操作。

¶查询分页

在对大量数据进行查询时,经常要用到分页查询操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
public function get($param1 = null, $param2 = null, $param3 = null, $order_by = null, $direction = 'DESC', $page_size = 30, $page_index = 1){

$table_name='database_table_1';



if ($param1) {
$this->db->where('param1', $param1);
}
if ($param2) {
$this->db->where('param2', $param2);
}
if ($param3) {
$this->db->like('param3', $param3);
}

if ($order_by) {
if (!$this->db->field_exists($order_by,$table_name)) {

$this->msg = '该筛选字段不存在';
$this->code = 10022;
return false;
} else {
$this->db->order_by($order_by, $direction == null ? 'DESC' : $direction);
}
}

$result_nums = $this->db->count_all_results($table_name,false);
$page_size = intval($page_size);

$page_index = intval($page_index);
$limit = 0;
$offset = 30;
if ($page_index >= 1) {
$offset = ($page_index - 1) * $page_size;
$limit = $page_size;
}
$this->db->limit($limit, $offset);
$query = $this->db->get();
$result = $query->result_array();

$result_new = array();
if ($result) {
$this->msg = '查到相关记录';
$this->code = 0;
$result_new['page_index'] = $page_index;
$result_new['page_size'] = $page_size;
$result_new['count'] = $result_nums;
$result_new['records'] = $result;
} else {
$this->msg = '未查到相关记录!';
$this->code = 10023;
return false;
}
return $result_new;
}

只需要稍微修改 $table_name 以及相关参数,就能完成筛选、排序和分页等操作。

¶批量更新

当有大部分数据需要进行同步时,考虑到效率问题以及相关的操作复杂度。最初我用的自己构造的sql语句进行操作,但效率很低,而且很繁琐。原sql语句:

1
SET name= CASE mobile WHEN '16688889999' THEN '小明' WHEN '19966665555' THEN '小红'...END

但是效率低、构造困难。后发现 CI 自带批量更新。官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

$data=array(
array(
'name'='小明',
'mobile'='16688889999',
'department'=>'信息部'
),
array(
'name'='小红',
'mobile'='19966665555',
'department'=>'体育部'
),
array(
'name'='小张',
'mobile'='16536556986',
'department'=>'科技部'
)
);

$re=$this->db->update_batch('database_table_1',$data,'mobile');

¶分组统计

当需要统计分析每小时/每天/每月/每年的记录时,时常会用到分组统计的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* 24h内,按小时统计 */
$this->db->select('DATE_FORMAT(s.insert_datetime,\'%Y-%m-%d\') as date,HOUR(s.insert_datetime) as hour,s.status,count(1) as total');
$this->db->where('TIMESTAMPDIFF(HOUR,DATE_FORMAT(s.insert_datetime,\'%Y-%m-%d %H:%m:%s\'),CURTIME())<=24');
$this->db->group_by('s.status,DATE_FORMAT(s.insert_datetime,\'%Y-%m-%d %H\')');
$this->db->order_by('date','ASC');
$result=$this->db->get()
->result_array();
/*
* 结果后处理,显示 count 为0
*/
$datetime_now = new DateTime();
$datetime_old = new DateTime();
date_sub($datetime_old, date_interval_create_from_date_string("23 hours"));
for (; $datetime_old->getTimestamp() <= $datetime_now->getTimestamp(); date_add($datetime_old, date_interval_create_from_date_string("1 hours"))) {
$status = array('发送成功', '发送失败');
foreach ($status as $s) {
# 筛选是否存在
$flag = 0;
if ($result) {
foreach ($result as $key => $row) {
if ($row['date'] == $datetime_old->format('Y-m-d') AND $row['hour'] == $datetime_old->format('H') AND $row['status'] == $s) {
$flag = 1;
}
}
}
//若不存在,则插入
if (!$flag) {
array_push($result, array(
'date' => $datetime_old->format('Y-m-d'),
'hour' => strval(intval($datetime_old->format('H'))),
'status' => $s,
'total' => 0
));
}
}
}
$result = arraySequence($result, 'date', 'SORT_ASC');

¶总结

都是一些经常用到的东西,记录一下,以后备查~

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 遐说

请喝果茶

  • Wechat

    Wechat

  • Alipay

    Alipay