Heim  >  Artikel  >  Backend-Entwicklung  >  [PHP]更新中间关联表数据的两种思路,php思路_PHP教程

[PHP]更新中间关联表数据的两种思路,php思路_PHP教程

WBOY
WBOYOriginal
2016-07-13 10:19:551205Durchsuche

[PHP]更新中间关联表数据的两种思路,php思路

/*---------------------------------------------------------------------------------------------------------

  @黑眼诗人 

---------------------------------------------------------------------------------------------------------*/

中间关联表:这里的中间表只存表1的主键和表2的主键,即多对多的形式。

(执行数据添加和删除为框架内部方法,不属于思路部分)

 

<span>/*<br />|-----------------------------------------------------------<br />|方法一:先全部删除旧数据,后添加新数据<br />|@chenwei <www.chenwei.ws>
|-----------------------------------------------------------<br />*/
</span><span>$res</span> = <span>$this</span>->classes->classEdit(<span>$id</span>, <span>$data</span>);  <span>//</span><span>修改主表数据</span>
                
<span>if</span>(<span>$res</span><span>)
{
  </span><span>//</span><span>先删除关联表数据</span>
  <span>$bool</span> = <span>$this</span>->lesson_classes->lessonClassesDel(<span>$id</span><span>);
                    
  </span><span>if</span>(<span>$bool</span><span>)
  {<br />    //循环组装条件,添加数据
    </span><span>foreach</span>(<span>$lesson_ids</span> <span>as</span> <span>$val</span><span>)<br />    {
      </span><span>$arr</span> = <span>array</span>('class_id'=><span>$id</span>, 'lesson_id'=><span>$val</span><span>);    //数据<br />
      </span><span>$res</span> = <span>$this</span>->lesson_classes->lessonClassesAdd(<span>$arr</span><span>);  //执行添加
    }
  }
</span><span>               
  </span><span>$this</span>->show_tips('操作成功!'<span>);
}
</span><span>else</span><span>
{
  </span><span>$this</span>->show_tips('操作失败!'<span>);
}<br /><br />//弊端:大批量删除数据这块儿不安全,存在一定程度的安全隐患。<br /></span>

 

 

<span>/*<br />|---------------------------------------------------------<br />|方法二:只添加需要的,只删要删的<br />|@chenwei <www.chenwei.ws>
|---------------------------------------------------------<br />*/
//库中查出的旧数据:</span><span>$arr_old</span><span> (处理过的一维数组)
//提交过来的新数据:</span><span>$arr_new</span><span> (得到的一维数组)

</span><span>$intersect</span> = <span>array_intersect</span>(<span>$arr_old</span>, <span>$arr_new</span>);   <span>//</span><span>交集(需要保留的部分,不用处理)</span>

<span>$result_del</span> = <span>array_diff</span>(<span>$arr_old</span>, <span>$intersect</span>);    <span>//</span><span>旧数据中需要删除的</span>

<span>$result_add</span> = <span>array_diff</span>(<span>$arr_new</span>, <span>$intersect</span>);    <span>//</span><span>新数据中需要增加的

//添加新增数据</span>
<span>if</span>(<span>$result_add</span> && <span>is_array</span>(<span>$result_add</span><span>))
{
    </span><span>foreach</span>(<span>$result_add</span> <span>as</span> <span>$val</span><span>)
    {
        </span><span>$data_add</span> = <span>array</span>('class_id'=><span>$id</span>, 'lesson_id'=><span>$val</span><span>);       //数据
        
        $bool_add = </span><span>$this</span>->lesson_classes->lessonClassesAdd(<span>$data_add</span><span>);  //执行添加
    }
}

</span><span>//</span><span>删除需要清除的数据</span>
<span>if</span>(<span>$result_del</span> && <span>is_array</span>(<span>$result_del</span><span>))
{
    </span><span>foreach</span>(<span>$result_del</span> <span>as</span> <span>$val</span><span>)
    {
        </span><span>$bool_del</span> = <span>$this</span>->lesson_classes->lessonClassesDel(<span>$id</span>, <span>$val</span><span>);  //执行删除
    }
}<br /><br />if($bool_add && $bool_del)<br />{<br />  $this->show_tips('操作成功!');<br />}<br />else<br />{<br />  $this->show_tips('操作失败!');<br />}<br /><br /><br />//特点:有针对性的添加数据和删除数据,较第一种方法,安全性高</span>

 

如果有不正确之处或更好的处理方式,请留言交流。

MYSQL+PHP 数据库中两张表A,B的关联问题

select `a`.*, `b`.`导师姓名` WHERE `a`.`导师ID` = `b`.`导师ID`
A表中导师ID为索引
B表中导师ID为主键

这样都不明白。。无奈了
你把你数据库里字段名写出来,别用文字代替了
另外还有要检索什么东西
直接写好sql给你就是了

if ($condition == ""){
$condition = "WHERE sid LIKE \"%".$id."%\"";
} else{
$condition .= "AND sid LIKE \"%".$id."%\"";
}
改成
condition = " AND sid LIKE \"%".$id."%\"";

然后SQL该下
$sql = 'select `data`.*, `teacher`.`tname` FROM `data`, `teacher` WHERE `data`.`tid` = `teacher`.`tid`' . $condition
就这样
 

在php中,用CI框架开发程序,有两个表相连接,可以同时删除两个表相关联的数据?怎写删除的代码?

delete from A where A.ID in (select B.ID from B where B.sum >100) 这只是一个例子 连表删除 还有连表查询 select * from a left join b on a.id=b.id where a.id=1 连表更新 update a,b set a.id=12 wehre b.id=2 没有经过测试啊
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/870654.htmlTechArticle[PHP]更新中间关联表数据的两种思路,php思路 /*--------------------------------------------------------------------------------------------------------- @黑眼诗人...
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn