前文见---帝国cms7.2后台信息列表页批量添加tags
http://www.zhongyf.com/qita/rj/2015-02-19/91911.html
对于其中的主要函数,jiuhecai做了改进,使得逻辑清晰,执行效率更高。
尤其是其中针对mysql的操作jiuhecai使用了比较少用但是高效的mysql函数,值得收藏学习。
function eInsertTags2($tags,$classid,$idr,$newstime){ global $empire,$dbtbpre,$class_r; //参数检查 $tagname = RepPostVar($tags); if(!trim($tagname))printerror("TAGS信息不能为空", "", 1, 0, 1); $tag = explode(",", $tagname); if(count($tag)>1)printerror("只能添加一个TAGS词", "", 1, 0, 1); $count = count($idr); //统计ID数量 if(empty($count))printerror("未选择信息ID", "", 1, 0, 1); $classid=(int)$classid; $mid=(int)$class_r[$classid][modid]; //获取模型id $tbname=$class_r[$classid][tbname];//获取表名 //获取tagid $tagid=(int)$empire->gettotal("select tagid as total from {$dbtbpre}enewstags where tagname='$tagname'"); if($tagid==0){ //新增tag $empire->query("insert into {$dbtbpre}enewstags(tagname,num,isgood,cid) values('$tagname',1,0,0);"); $tagid=$empire->lastid(); }else{ //已经存在的tag,过滤掉已经添加过的 $ids=join(',',$idr); $allids=$empire->gettotal("select group_concat(id) as total from {$dbtbpre}enewstagsdata where tagid='$tagid'and id in($ids) and mid='$mid' "); $allidr=explode(',',$allids); $idr=array_diff($idr,$allidr); if(empty($idr))printerror("已经有了,无需重复添加", "", 1, 0, 1); } //开始正经干活 foreach($idr as $id){ //获得副表名称 $jhcr = $empire->fetch1("select classid,stb,newstime from {$dbtbpre}ecms_".$tbname." where id='$id' limit 1"); //更新副表 $ftbname=$dbtbpre."ecms_".$tbname."_data_".$jhcr['stb']; $empire->query("update $ftbname set infotags=trim(BOTH ',' from concat(infotags,',','$tagname')) where id='$id'"); //更新tags数据表 $empire->query("insert into {$dbtbpre}enewstagsdata(tagid,classid,id,newstime,mid) values('$tagid','$jhcr[classid]','$id','$jhcr[newstime]','$mid')"); } //更新tags主表 $empire->query("update {$dbtbpre}enewstags set num=num+".count($idr)." where tagid='$tagid'"); printerror("批量添加TAGS成功", "", 1, 0, 1); }