当前位置:首页 > CMS教程 > phpcms > 列表

phpcms中实现不同结构数据库转换

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-22 10:18:59 浏览: 评论:0 

需求是把之前网站的一个mssql2000的数据库转换成mysql数据库,并且新的网站采用不同的程序,因此还要把数据库中的数据根据字段的不同,和字段数据规则的不同进行转换.

1.不同数据库类型直接的数据库转换

navicat是个很好的数据库管理软件,可以用它进行不同类型数据库直接的转换,以下链接详细说明如何用navicat将mssql2000数据库转换成mysql数据库.

2.不同结构数据库之间的数据转换

不同数据库结构之间的数据转换存在几个问题,①字段不同,甚至无法一一对应 ②字段格式不同,要转换成目标数据库字段的设计格式 ③sql语句结合php程序转换.

这是把之前一个downplus下载系统的数据库转换成phpcms的数据库,直接上代码,有这方面需求的研究代码吧,站点1 软件站.

①导入所有软件到软件表v95_soft,代码如下:

  1. insert into v95_soft(id,catid,title,soft,soft_name,pinyin,thumb,keywords,size,start,inputtime,updatetime,auth,property) 
  2. select softid,softclassid,seotitle,appname,softname,softphoneticism,IcoImage,softkeywords,softsize,softscore, 
  3. unix_timestamp(SoftInsertDate),unix_timestamp(softcreatedate),softlicence,softproperty  
  4. from dp_softlist; 

②写sql设status为99,代码如下:

update v95_soft set status=99;

③到后台更新全站url,然后更新title为空的,软件名称,代码如下:

update v95_soft set title=soft_name where title='';

④导入到v95_soft_date,代码如下:

  1. insert into v95_soft_data(id,content,language,website,icon,softos)  
  2. select softid,softintro,softlanguage,softauthorurl,IcoImage,softos  
  3. from dp_softlist; 

⑤执行php转换程序,导入下载地址:

http://www.xxx.com/admin.php?m=admin&c=index&a=down,代码如下:

  1. public function down(){ 
  2.  set_time_limit(0); 
  3.  $sql = "select id from v95_soft_data "
  4.  $result = $this->db->query($sql); 
  5.  while ($r = mysql_fetch_assoc($result)) { 
  6.   //$softid = 11; 
  7.   $softid = $r['id']; 
  8.   $sql = "select fileurlname,fileurl,fileftpid from dp_softfiles where softid = $softid "
  9.   $downfile = $this->db->query($sql); 
  10.   $downfiles = array(); 
  11.   while ($r = mysql_fetch_assoc($downfile)) { 
  12.    $isbigfile = 0; 
  13.    if (!$r['fileurlname']) { 
  14.     $sql = "select soft_name from v95_soft where id = $softid "
  15.     $result2 = $this->db->query($sql); 
  16.     while ($r2 = mysql_fetch_assoc($result2)) { 
  17.      $soft_name = $r2['soft_name']; 
  18.     } 
  19.     $r['fileurlname'] = $soft_name
  20.    } 
  21.    if(12 == $r['fileftpid']){ 
  22.     $isbigfile = 1; 
  23.    } 
  24.    $downfiles[] = array('fileurl'=>$r['fileurl'],'filename'=>$r['fileurlname'],'isbigfile'=>$isbigfile); 
  25.   } 
  26.   $downfiles = array2string($downfiles); 
  27.   //var_dump($downfiles);exit; 
  28.   $sql = "update v95_soft_data set downfiles = '$downfiles' where id = $softid "
  29.   $this->db->query($sql); 
  30.  } 
  31.  echo 'OK'

⑥软件单位和大小转换,代码如下:

  1. update v95_soft set size=size/1000,unit='MB' where size>1000 and size<1000000; 
  2. update v95_soft set size=size/1000000,unit='GB' where size>1000000; 

⑦导入标签,到v95_keyword和v95_keyword_data,代码如下:

insert into v95_keyword(id,keyword) select tagid,tagname from dp_tag;

update v95_keyword set siteid=1;

⑧执行php转换程序,匹配标签到关键字.

http:///admin.php?m=admin&c=index&a=transe

php代码如下:

  1. public function transe(){ 
  2.  set_time_limit(0); 
  3.  $sql = "select tagid,softidlist from dp_tag"
  4.  $result = $this->db->query($sql); 
  5.  while($r = mysql_fetch_assoc($result)){ 
  6.   //var_dump($r);exit; 
  7.   $tags = $r['softidlist']; 
  8.   $tags = explode(","$tags); 
  9.   $tags = array_filter($tags); 
  10.   //var_dump($tags);exit; 
  11.   $tagid = $r['tagid']; 
  12.   //echo $tagid;exit; 
  13.   foreach ($tags as $tag) { 
  14.    $sql="insert into v95_keyword_data(tagid,siteid,contentid) values('$tagid','1','$tag')";//开源代码phpfensi.com 
  15.    $this->db->query($sql); 
  16.   } 
  17.  } 
  18.  echo 'OK'

调整格式,代码如下:

update v95_keyword_data set contentid=CONCAT(contentid,'-12');

⑩点击率,代码如下:

  1. insert into v95_hits(hitsid,catid) select id,catid from v95_soft; 
  2. //可以不用转,太慢了 
  3.  
  4. update v95_hits as a left join dp_softlist as b on a.hitsid=b.softid  
  5. set a.weekviews=b.softweekhits,a.monthviews=b.softmonthhits,a.dayviews=b.softdayhits,a.views=b.softallhits; 
  6.  
  7. update v95_hits set hitsid=concat('c-12-',hitsid); 

十一 相关文章,代码如下:

http:///admin.php?m=admin&c=index&a=related (最后执行,很慢)

php代码:

  1. public function related(){ 
  2.  set_time_limit(0); 
  3.  $sql = "select id,keywords from v95_soft"
  4.  $result = $this->db->query($sql); 
  5.  while ($r = mysql_fetch_assoc($result)) { 
  6.   $softid = $r['id']; 
  7.   $keywords = $r['keywords']; 
  8.   $keywords = explode(","$keywords); 
  9.   $related = ''
  10.   foreach ($keywords as $keyword) { 
  11.    $sql = "select softidlist from dp_tag where tagname='$keyword' "
  12.    $result2 = $this->db->query($sql);  
  13.    while ($r2 = mysql_fetch_assoc($result2)) { 
  14.     $related = $related.','.$r2['softidlist']; 
  15.    } 
  16.   } 
  17.   $related = explode(","$related); 
  18.   $related = array_filter($related); 
  19.   shuffle($related); 
  20.   $related = array_slice($related, 0,10); 
  21.   $related = implode("|"$related); 
  22.   $sql =  "update v95_soft_data set relation = '$related' where id = $softid "
  23.   $this->db->query($sql); 
  24.  } 
  25.  echo 'OK'

站点2 单机站

①由于类别不同,要先把原先类别改成现在的类别id,代码如下:

  1. update downtb set ClassID=217 where ClassID=1; 
  2. update downtb set ClassID=218 where ClassID=2; 
  3. update downtb set ClassID=219 where ClassID=3; 
  4. update downtb set ClassID=220 where ClassID=4; 
  5. update downtb set ClassID=221 where ClassID=5; 
  6. update downtb set ClassID=222 where ClassID=6; 
  7. update downtb set ClassID=223 where ClassID=7; 
  8. update downtb set ClassID=224 where ClassID=8; 
  9. update downtb set ClassID=225 where ClassID=9; 
  10. update downtb set ClassID=226 where ClassID=10; 
  11. update downtb set ClassID=233 where ClassID=11; 

②导入主表到v95_danji,代码如下:

  1. insert into v95_danji(id,catid,title,thumb,soft_name,size,inputtime,updatetime,auth,language,downurl)  
  2. select DownID,ClassID,SeoTitle,thumb,DownName,Sizes,unix_timestamp(addtime),unix_timestamp(addtime), 
  3. Shouquan,Languages,DownIntro1 from downtb; 

③后台更新全站url,然后设status为99,没有seo标题的采用单机游戏名称,代码如下:

update v95_danji set status=99;

update v95_danji set title=soft_name where title='';

④大小单位转换,下载地址格式调整,代码如下:

  1. update v95_danji set size=size/1000,unit='MB' where size>1000 and size<1000000; 
  2. update v95_danji set size=size/1000000,unit='GB' where size>1000000; 
  3. update v95_danji set downurl=replace(downurl,'@@**@@本地下载',''); 

⑤修改下载地址

要判断单机游戏填写的地址,如果填写的,代码如下:

game=z1.9553.com

game2=z2.9553.com

以此类推:/admin.php?m=admin&c=index&a=downurl(废弃)

⑥导入到v95_danji_data,代码如下:

insert into v95_danji_data(id,content,gameid) select DownID,DownIntro,game_id from downtb;

⑦单机标签转换

1、新增单机站标签到v95_keyword表,代码如下:

insert into v95_keyword(id,keyword) select TagID+31616,TagName from tagtb;

update v95_keyword set siteid=2 where siteid=0;

2、执行php程序,此时记住当前v95_keyword中siteid为1的最大id,更改php程序,再填入keywords,执行:http:///admin.php?m=admin&c=index&a=danji

php代码如下:

  1. public function danji(){ 
  2.  set_time_limit(0); 
  3.  $sql = "select DownID,ToTagIDs from downtb"
  4.  $result = $this->db->query($sql); 
  5.  while ($r = mysql_fetch_assoc($result)) { 
  6.   $id=$r['DownID']; 
  7.   $ToTagIDs = explode(","$r['ToTagIDs']); 
  8.   $ToTagIDs = array_filter($ToTagIDs); 
  9.   foreach ($ToTagIDs as $key => $value) { 
  10.    $ToTagIDs[$key] = $value+31682; 
  11.   } 
  12.   //var_dump($ToTagIDs);exit; 
  13.   foreach ($ToTagIDs as $tagid) { 
  14.    $sql = "select keyword from v95_keyword where id=$tagid "
  15.    $keywords = $this->db->query($sql); 
  16.    while ($r = mysql_fetch_assoc($keywords)) { 
  17.     $keyword[] = $r['keyword']; 
  18.    } 
  19.  
  20.   } 
  21.   $new_keyword = implode(","$keyword); 
  22.   $sql="update v95_danji set keywords='$new_keyword' where id=$id"
  23.   $this->db->query($sql); 
  24.   unset($keyword); 
  25.   unset($ToTagIDs); 
  26.  } 
  27.  echo 'OK'

3、执行php程序:http:///admin.php?m=admin&c=index&a=danji2

php代码如下:

  1. public function danji2(){ 
  2.  set_time_limit(0); 
  3.  $sql = "select id,keywords from v95_danji"
  4.  $result = $this->db->query($sql); 
  5.  while ($r = mysql_fetch_assoc($result)) { 
  6.   $contentid = $r['id']; 
  7.   $keywords = $r['keywords']; 
  8.   $tags = explode(","$keywords); 
  9.   foreach ($tags as $tag) { 
  10.    $sql = "select id from v95_keyword where keyword='$tag' and siteid=2"
  11.    $id = $this->db->query($sql); 
  12.    while ($r = mysql_fetch_assoc($id)) { 
  13.     $id = $r['id']; 
  14.     $sql = "insert into v95_keyword_data(tagid,siteid,contentid) values('$id',2,'$contentid')";//开源代码phpfensi.com 
  15.     $this->db->query($sql); 
  16.    } 
  17.   } 
  18.   unset($tags); 
  19.  } 
  20.  echo 'OK'

4、修改v95_keyword_data表siteid为2的contentid格式,代码如下:

update v95_keyword_data set contentid=CONCAT(contentid,'-14') where siteid=2;

⑧使点击率可用,代码如下:

insert into v95_hits(hitsid,catid) select CONCAT('c-14-',id),catid from v95_danji;

Tags: phpcms结构 phpcms数据库转换

分享到:

相关文章