[PHP]更新中间关联表数据的两种思路
--------------------------------------------------------------------------------------------------------------
中间关联表:这里的中间表只存表1的主键和表2的主键,即多对多的形式。
(执行数据添加和删除为框架内部方法,不属于思路部分)
/*
|-----------------------------------------------------------
|方法一:先全部删除旧数据,后添加新数据
|@chenwei <www.farwish.com>
|-----------------------------------------------------------
*/
$res = $this->classes->classEdit($id, $data); //修改主表数据 if($res)
{
//先删除关联表数据
$bool = $this->lesson_classes->lessonClassesDel($id); if($bool)
{
//循环组装条件,添加数据
foreach($lesson_ids as $val)
{
$arr = array('class_id'=>$id, 'lesson_id'=>$val); //数据
$res = $this->lesson_classes->lessonClassesAdd($arr); //执行添加
}
} $this->show_tips('操作成功!');
}
else
{
$this->show_tips('操作失败!');
} //弊端:大批量删除数据这块儿不安全,存在一定程度的安全隐患。
/*
|---------------------------------------------------------
|方法二:只添加需要的,只删要删的
|@chenwei <www.farwish.com>
|---------------------------------------------------------
*/
//库中查出的旧数据:$arr_old (处理过的一维数组)
//提交过来的新数据:$arr_new (得到的一维数组) $intersect = array_intersect($arr_old, $arr_new); //交集(需要保留的部分,不用处理) $result_del = array_diff($arr_old, $intersect); //旧数据中需要删除的 $result_add = array_diff($arr_new, $intersect); //新数据中需要增加的 //添加新增数据
if($result_add && is_array($result_add))
{
foreach($result_add as $val)
{
$data_add = array('class_id'=>$id, 'lesson_id'=>$val); //数据 $bool_add = $this->lesson_classes->lessonClassesAdd($data_add); //执行添加
}
} //删除需要清除的数据
if($result_del && is_array($result_del))
{
foreach($result_del as $val)
{
$bool_del = $this->lesson_classes->lessonClassesDel($id, $val); //执行删除
}
} if($bool_add && $bool_del)
{
$this->show_tips('操作成功!');
}
else
{
$this->show_tips('操作失败!');
} //特点:有针对性的添加数据和删除数据,较第一种方法,安全性高
如果有不正确之处或更好的处理方式,请留言交流。
Link: http://www.cnblogs.com/farwish/p/3938575.html
@黑眼诗人 <www.farwish.com>
[PHP]更新中间关联表数据的两种思路的更多相关文章
- oracle删除表数据的两种的方式
转自:https://blog.csdn.net/qq_37840993/article/details/82490787 平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种 ...
- oracle中清空表数据的两种方法
1.delete from t 2 .truncate table t 区别: 1.delete是dml操作:truncate是ddl操作,ddl隐式提交不能回滚 2.delete from t可以回 ...
- ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
- strus2中获取表单数据 两种方式 属性驱动 和模型驱动
strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...
- 把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进)
#把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进) ##背景 项目中经常需要把JSON数据填充到页面表单,一开始我使用easyui自带的form load方法,觉得效率很低,经 ...
- oracle 批量删除表数据的4种方式
1.情景展示 情景一: 删除PRIMARY_INDEX_TEST表中,MINDEX_ID字段为空的数据 情景二: 删除VIRTUAL_CARD_TEST表中的脏数据 2.解决方案 情景一的解决方案 ...
- oracle 插入表数据的4种方式
1.往表中插入一整行数据 /*方法一*/ INSERT INTO 表名 VALUES(val1,val2,val3,...); /*方法二*/ '; 如: ,, FROM DUAL; 注意: 2. ...
- SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式
SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...
- 【代码笔记】iOS-向服务器传JSON数据的两种方式
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
随机推荐
- MySQL5.7修改默认密码、随机密码
mysql5.7以后默认生成随机密码,修改root用户密码 1.修改配置参数Linux: /etc/my.cnf Windows: C:\ProgramData\MySQL\MySQL Server ...
- system调用导致子进程socket句柄泄漏问题分析
问题引出:A进程与B进程各自独立,都是服务器进程,常驻系统,互不相干.在某次重启A进程后,发现由于固定监听的端口被占用而无法启动.检查,发现是B进程占用了该端口,检查B进程代码,没有相关的打开该固定端 ...
- Jupyter配置步骤
Jupyter是基于浏览器的可交互式开发工具,在数据科学界非常受欢迎,它功能齐全,使用方便,是一款数据分析和建模挖掘的利器. 本文简介Jupyter的配置和使用过程 一.修改添加国内镜像 通常我会先安 ...
- Install Greenplum OSS on Ubuntu
About Greenplum Database Greenplum Database is an MPP SQL Database based on PostgreSQL. Its used in ...
- Linux线程池的实现
线程池的实现 1:自定义封装的条件变量 //condition.h #ifndef _CONDITION_H_ #define _CONDITION_H_ #include <pthread.h ...
- Android:真机调试遇到的问题(INSTALL_FAILED_CANCELLED_BY_USER和INSTALL_FAILED_INSUFFICIENT_STORAGE)
Android:真机调试遇到的问题(INSTALL_FAILED_CANCELLED_BY_USER和INSTALL_FAILED_INSUFFICIENT_STORAGE) 刚开始做Android开 ...
- mysql 取整数或小数或精确位数
select cast(3.1415926 as decimal(9,2))精确到几位 select round(1024.5); 四舍五入 select floor(1024.5);取整数部分 se ...
- Django中的视图
Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...
- 网络编程socket,详细讲述osi七层协议
一 网络编程 源方: 我们首先来说下数据在两台计算机之间的传递:操作系统控制着除应用层以外的四层 对于用户来说我们发数据一般都是在应用层,也就是我们是直接操作应用软件的,那么应用层要把数据传给传输层就 ...
- three.js学习:初学three.js,从立方体开始
目前three.js是浏览器展现3D效果的一个很强大的js工具,遗憾的是没有特别系统而全面的文档(threejs官方文档感觉有些缺漏,可以和WebGL中文网的threejs教程对比着看).好了,根据W ...