--------------------------------------------------------------------------------------------------------------

中间关联表:这里的中间表只存表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]更新中间关联表数据的两种思路的更多相关文章

  1. oracle删除表数据的两种的方式

    转自:https://blog.csdn.net/qq_37840993/article/details/82490787 平时写sql中我们都会用到删除语句,而平时删除表数据的时候我们经常会用到两种 ...

  2. oracle中清空表数据的两种方法

    1.delete from t 2 .truncate table t 区别: 1.delete是dml操作:truncate是ddl操作,ddl隐式提交不能回滚 2.delete from t可以回 ...

  3. ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法

    ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块  --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...

  4. strus2中获取表单数据 两种方式 属性驱动 和模型驱动

    strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值 * 如果一个属性在对象栈,在页面 ...

  5. 把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进)

    #把JSON数据载入到页面表单的两种思路(对easyui自带方法进行改进) ##背景 项目中经常需要把JSON数据填充到页面表单,一开始我使用easyui自带的form load方法,觉得效率很低,经 ...

  6. oracle 批量删除表数据的4种方式

      1.情景展示 情景一: 删除PRIMARY_INDEX_TEST表中,MINDEX_ID字段为空的数据 情景二: 删除VIRTUAL_CARD_TEST表中的脏数据 2.解决方案 情景一的解决方案 ...

  7. oracle 插入表数据的4种方式

      1.往表中插入一整行数据 /*方法一*/ INSERT INTO 表名 VALUES(val1,val2,val3,...); /*方法二*/ '; 如: ,, FROM DUAL; 注意: 2. ...

  8. SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式

    SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...

  9. 【代码笔记】iOS-向服务器传JSON数据的两种方式

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

随机推荐

  1. MySQL5.7修改默认密码、随机密码

    mysql5.7以后默认生成随机密码,修改root用户密码 1.修改配置参数Linux: /etc/my.cnf Windows:  C:\ProgramData\MySQL\MySQL Server ...

  2. system调用导致子进程socket句柄泄漏问题分析

    问题引出:A进程与B进程各自独立,都是服务器进程,常驻系统,互不相干.在某次重启A进程后,发现由于固定监听的端口被占用而无法启动.检查,发现是B进程占用了该端口,检查B进程代码,没有相关的打开该固定端 ...

  3. Jupyter配置步骤

    Jupyter是基于浏览器的可交互式开发工具,在数据科学界非常受欢迎,它功能齐全,使用方便,是一款数据分析和建模挖掘的利器. 本文简介Jupyter的配置和使用过程 一.修改添加国内镜像 通常我会先安 ...

  4. Install Greenplum OSS on Ubuntu

    About Greenplum Database Greenplum Database is an MPP SQL Database based on PostgreSQL.  Its used in ...

  5. Linux线程池的实现

    线程池的实现 1:自定义封装的条件变量 //condition.h #ifndef _CONDITION_H_ #define _CONDITION_H_ #include <pthread.h ...

  6. Android:真机调试遇到的问题(INSTALL_FAILED_CANCELLED_BY_USER和INSTALL_FAILED_INSUFFICIENT_STORAGE)

    Android:真机调试遇到的问题(INSTALL_FAILED_CANCELLED_BY_USER和INSTALL_FAILED_INSUFFICIENT_STORAGE) 刚开始做Android开 ...

  7. mysql 取整数或小数或精确位数

    select cast(3.1415926 as decimal(9,2))精确到几位 select round(1024.5); 四舍五入 select floor(1024.5);取整数部分 se ...

  8. Django中的视图

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...

  9. 网络编程socket,详细讲述osi七层协议

    一 网络编程 源方: 我们首先来说下数据在两台计算机之间的传递:操作系统控制着除应用层以外的四层 对于用户来说我们发数据一般都是在应用层,也就是我们是直接操作应用软件的,那么应用层要把数据传给传输层就 ...

  10. three.js学习:初学three.js,从立方体开始

    目前three.js是浏览器展现3D效果的一个很强大的js工具,遗憾的是没有特别系统而全面的文档(threejs官方文档感觉有些缺漏,可以和WebGL中文网的threejs教程对比着看).好了,根据W ...