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

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

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

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

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

这是把之前一个downplus下载系统的数据库转换成phpcms的数据库。

直接上代码,有这方面需求的研究代码吧。

站点1 软件站

①导入所有软件到软件表v95_soft

 代码如下 复制代码
insert into v95_soft(id,catid,title,soft,soft_name,pinyin,thumb,keywords,size,start,inputtime,updatetime,auth,property)
select softid,softclassid,seotitle,appname,softname,softphoneticism,IcoImage,softkeywords,softsize,softscore,
unix_timestamp(SoftInsertDate),unix_timestamp(softcreatedate),softlicence,softproperty
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

 代码如下 复制代码
insert into v95_soft_data(id,content,language,website,icon,softos)
select softid,softintro,softlanguage,softauthorurl,IcoImage,softos
from dp_softlist;

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

http://www.xxx.com/admin.php?m=admin&c=index&a=down

 代码如下 复制代码
public function down(){
 set_time_limit(0);
 $sql = "select id from v95_soft_data ";
 $result = $this->db->query($sql);
 while ($r = mysql_fetch_assoc($result)) {
  //$softid = 11;
  $softid = $r['id'];
  $sql = "select fileurlname,fileurl,fileftpid from dp_softfiles where softid = $softid ";
  $downfile = $this->db->query($sql);
  $downfiles = array();
  while ($r = mysql_fetch_assoc($downfile)) {
   $isbigfile = 0;
   if (!$r['fileurlname']) {
    $sql = "select soft_name from v95_soft where id = $softid ";
    $result2 = $this->db->query($sql);
    while ($r2 = mysql_fetch_assoc($result2)) {
     $soft_name = $r2['soft_name'];
    }
    $r['fileurlname'] = $soft_name;
   }
   if(12 == $r['fileftpid']){
    $isbigfile = 1;
   }
   $downfiles[] = array('fileurl'=>$r['fileurl'],'filename'=>$r['fileurlname'],'isbigfile'=>$isbigfile);
  }
  $downfiles = array2string($downfiles);
  //var_dump($downfiles);exit;
  $sql = "update v95_soft_data set downfiles = '$downfiles' where id = $softid ";
  $this->db->query($sql);
 }
 echo 'OK';
}

⑥软件单位和大小转换

 代码如下 复制代码
update v95_soft set size=size/1000,unit='MB' where size>1000 and size<1000000;
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代码:

 代码如下 复制代码
public function transe(){
 set_time_limit(0);
 $sql = "select tagid,softidlist from dp_tag";
 $result = $this->db->query($sql);
 while($r = mysql_fetch_assoc($result)){
  //var_dump($r);exit;
  $tags = $r['softidlist'];
  $tags = explode(",", $tags);
  $tags = array_filter($tags);
  //var_dump($tags);exit;
  $tagid = $r['tagid'];
  //echo $tagid;exit;
  foreach ($tags as $tag) {
   $sql="insert into v95_keyword_data(tagid,siteid,contentid) values('$tagid','1','$tag')";
   $this->db->query($sql);
  }
 }
 echo 'OK';
}

调整格式

 代码如下 复制代码
update v95_keyword_data set contentid=CONCAT(contentid,'-12');

⑩点击率

 代码如下 复制代码

insert into v95_hits(hitsid,catid) select id,catid from v95_soft;
//可以不用转,太慢了

update v95_hits as a left join dp_softlist as b on a.hitsid=b.softid
set a.weekviews=b.softweekhits,a.monthviews=b.softmonthhits,a.dayviews=b.softdayhits,a.views=b.softallhits;
 
update v95_hits set hitsid=concat('c-12-',hitsid);

十一 相关文章

 代码如下 复制代码

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

public function related(){
 set_time_limit(0);
 $sql = "select id,keywords from v95_soft";
 $result = $this->db->query($sql);
 while ($r = mysql_fetch_assoc($result)) {
  $softid = $r['id'];
  $keywords = $r['keywords'];
  $keywords = explode(",", $keywords);
  $related = '';
  foreach ($keywords as $keyword) {
   $sql = "select softidlist from dp_tag where tagname='$keyword' ";
   $result2 = $this->db->query($sql);
   while ($r2 = mysql_fetch_assoc($result2)) {
    $related = $related.','.$r2['softidlist'];
   }
  }
  $related = explode(",", $related);
  $related = array_filter($related);
  shuffle($related);
  $related = array_slice($related, 0,10);
  $related = implode("|", $related);
  $sql =  "update v95_soft_data set relation = '$related' where id = $softid ";
  $this->db->query($sql);
 }
 echo 'OK';
}

站点2 单机站

①由于类别不同,要先把原先类别改成现在的类别id

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

②导入主表到v95_danji

 代码如下 复制代码
insert into v95_danji(id,catid,title,thumb,soft_name,size,inputtime,updatetime,auth,language,downurl)
select DownID,ClassID,SeoTitle,thumb,DownName,Sizes,unix_timestamp(addtime),unix_timestamp(addtime),
Shouquan,Languages,DownIntro1 from downtb;

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

 代码如下 复制代码
update v95_danji set status=99;
update v95_danji set title=soft_name where title='';

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

 代码如下 复制代码
update v95_danji set size=size/1000,unit='MB' where size>1000 and size<1000000;
update v95_danji set size=size/1000000,unit='GB' where size>1000000;
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代码:

 代码如下 复制代码
public function danji(){
 set_time_limit(0);
 $sql = "select DownID,ToTagIDs from downtb";
 $result = $this->db->query($sql);
 while ($r = mysql_fetch_assoc($result)) {
  $id=$r['DownID'];
  $ToTagIDs = explode(",", $r['ToTagIDs']);
  $ToTagIDs = array_filter($ToTagIDs);
  foreach ($ToTagIDs as $key => $value) {
   $ToTagIDs[$key] = $value+31682;
  }
  //var_dump($ToTagIDs);exit;
  foreach ($ToTagIDs as $tagid) {
   $sql = "select keyword from v95_keyword where id=$tagid ";
   $keywords = $this->db->query($sql);
   while ($r = mysql_fetch_assoc($keywords)) {
    $keyword[] = $r['keyword'];
   }
 
  }
  $new_keyword = implode(",", $keyword);
  $sql="update v95_danji set keywords='$new_keyword' where id=$id";
  $this->db->query($sql);
  unset($keyword);
  unset($ToTagIDs);
 }
 echo 'OK';
}

3、执行php程序

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

php代码:

 代码如下 复制代码
public function danji2(){
 set_time_limit(0);
 $sql = "select id,keywords from v95_danji";
 $result = $this->db->query($sql);
 while ($r = mysql_fetch_assoc($result)) {
  $contentid = $r['id'];
  $keywords = $r['keywords'];
  $tags = explode(",", $keywords);
  foreach ($tags as $tag) {
   $sql = "select id from v95_keyword where keyword='$tag' and siteid=2";
   $id = $this->db->query($sql);
   while ($r = mysql_fetch_assoc($id)) {
    $id = $r['id'];
    $sql = "insert into v95_keyword_data(tagid,siteid,contentid) values('$id',2,'$contentid')";
    $this->db->query($sql);
   }
  }
  unset($tags);
 }
 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;

时间: 2025-01-21 02:00:28

phpcms中实现不同结构数据库转换的相关文章

CS结构混合编程 新增时 把textbox中内容保存到数据库对应字段

问题描述 前台为嵌入式C后台c++由于该字段是备注信息太长不在gridview里面进行操作,查询新增修改等操作都在textbox里面进行.表名为hdys01,字段名remark.现在想请问下在测试环境的gridview里面新增一条记录的时候,其他都能保存,就是textbox里面内容怎么保存到数据库对应的字段?代码应该写在前台还是后台,哪个位置.我们前台格式为查询函数.画面载入.按钮区.最好能给出详细的代码,谢谢各位 解决方案 解决方案二:新增时:在保存前加上这样的语句:DataTabledt=d

Visual Studio .NET Enterprise Architect 中基于 Visio 的数据库建模:第一部分/1

enterprise|visual|数据|数据库 Terry HalpinMicrosoft Corporation 2001年11月 摘要:本文是介绍 Microsoft Visual Studio .NET Enterprise Architect 中基于 Visio 的数据库建模组件系列文章中的第一篇,重点介绍该工具提供的对象角色建模 (ORM) 支持. 目录 简介 创建新的 ORM 模型 使用 Fact Editor(事实编辑器) 添加句子类型 使用 Fact Editor(事实编辑器)

利用RMAN将数据库转换到不同平台上

可传送的tablespace特性--直接在Oracle实例之间复制数据文件,而不卸载和加载数据--是在Oracle 8i中引入的,并从那时开始成为一种功能性.一开始,要转移的tablespace和目的数据库必须要具有相同大小的模块.Oracle 9i中增加的多种模块大小的支持克服了这种局限性.现在,在Oracle 10g中,平台的限制也在很大程度上被解决了. 恢复管理器(Recovery Manager,RMAN)程序中包括了一个新的CONVERT(转换)命令,你可以将其用来进行平台间的移动.小

access数据库转换导入到mysql数据库

  一. 软件介绍 DB2MYSQL是一个可以自动将ACCESS数据库文件转化为对应的SQL代码的软件.可广泛应用于ACCESS数据库转换为MYSQL或其他类型的SQL数据库的软件. DB2MYSQL能够实现可视化操作数据库,转换界面非常简单明了,可轻松实现ACCESS数据库转换为MYSQL数据库.如果想要将SQL SERVER的数据库转换到MYSQL,也可以使用这个软件,具体操作是先使用SQL SERVER的"导入和导出数据"将SQL SERVER数据导出到ACCESS文件,然后再将

asp中利用数组实现数据库记录的批量录入方法

数据|数据库|数组 asp中利用数组实现数据库记录的批量录入方法(原创) 演示:http://www.zwtd.com/1/yanek/n/needdj2.asp <% rem 文章题目 asp中利用数组实现数据库记录的批量录入方法(原创)作者:yanek联系email:aspboy@263.net%> 包括两个文件 1.allneeddj.asp:实现表单的生成 2. allneeddjresult.asp 处理表单批量录入 3.hbedu.mdb :数据库文件 其数据库结构如下 provi

代码实现数据库转换[sql2000 VS DBF格式]

数据|数据库|转换  这里,就SqlServer,DBF两种格式的转化问题做个总结. 一: 从dBase文件中,导入数据到SQL数据库中,很简单,直接用下面的语句: /*===================================================================*/--如果接受数据导入的表已经存在insert into 表 select * from openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATA

ASP中怎么实现SQL数据库备份、恢复

sql|备份|恢复|数据|数据库 1.ASP中怎么实现SQL数据库备份.恢复!答:asp在线备份sql server数据库:1.备份<%SQL="backup database 数据库名 to disk='"&Server.MapPath("backup")&"\"&"backuptext.dat"&"'"set cnn=Server.createobject(&quo

旧版数据库转换至ACCESS2000的注意事项

由于ACCESS97(或更早的版本)无法开启以ACCESS2000制作的档案,故如同以往历次改版,若要完全发挥ACCESS2000之功能,读者须考虑将旧版数据库转换至2000,请见以下说明: 一.共用数据表 不论数据库为何种版本,数据表皆是可共用的资源,如ACCESS97数据库可连结来自ACCESS2000数据库中的数据表,所以若环境内不是每一位使用者皆已升级至ACCESS2000,又为保持数据正确,可将数据表做为共用. 二.ACCESS2000转换至ACCESS97 这是ACCESS历次改版中

在VB中兼容非ACCESS数据库的技巧

本文从VB数据库体系结构的角度出发,结合一个具体实例,阐述了在VB中兼容非ACCESS格式数据库的具体方法和技巧. 关键词:VB.非ACCESS数据库.数据存取对象 一个完整的数据库管理系统(DBMS)应是能兼容市面上各种较流行数据格式的系统,它充分考虑了不同用户的实际要求.鉴于目前市面上有多种数据库格式(如Foxpro.DBase.Paradox等)流行,因而在VB数据库应用程序中兼容非ACCESS数据库就显得尤为重要了. 作为一种流行的开发平台,VB提供了强大的数据库功能.主要有以下三种:数