我需要帮助将数据从一个MySQL数据库插入另一个MySQL数据库。我根据过去90天从每天晚上更新的MySQL数据库中获取数据。我正试图将数据从一个表格转换为另一个表格。这是我到目前为止所拥有的。
<?php
$con= mysqli_connect("localhost","jeff","birdie15","kcoj");
if ($con->connect_errno) {
echo ("<br/> Failed to connect to MySQL:(".
$con->connect_errno .").".$con->connect_error);
}else{
echo ("Connected to database".KCOJ);
echo ("<br/> ".$con->host_info);
}
$d= date ($format, strtotime ('-90' .$date));
$code = mysqli_query($con,"INSERT INTO last90Days * SELECT * FROM drugCountsByCharge WHERE countyCode ='9999' AND date <= '$d'");
?>
我有36列必须被查询然后插入并且有大量的行。任何和所有的帮助将不胜感激。
答案 0 :(得分:1)
为了获得更好的性能,尝试使用分组的SQL语句,并避免获得太多结果并将所有可用内存加载到mysql中,通过交互获得几行。
您可以先计算源数据库中的行总数,然后将其拆分为&#34; blocks&#34;例如,在100.000个寄存器中,你可以创建一个这样的插入语句: INSERT INTO your_table(field1,field2,field3,field4,....)VALUES (值1,值2,值3,值4,....) ,(值1,值2,值3,值4,....) ,(值1,值2,值3,值4,....) ,(值1,值2,值3,值4,....) ,(值1,值2,值3,值4,....) ,(值1,值2,值3,值4,....) ...
所以......首先你必须知道你拥有的总行数: SELECT COUNT(1)总计来自your_table;
之后,您可以为每次迭代估算多个行:
for($i=0;$i<=$number_of_iteractions;$i++) {
$limit_start = $i * $rows_per_process; # to know where to start getting data
$limit_end = $rows_per_process;
$sql = "SELECT colunsx... FROM your_table LIMIT $limit_start,$limit_end";
$query = mysql_query($sql);
$data = array();
while($row = mysql_fetch_array($query)) {
# build your VALUES statement here
}
}
?>
构建分组的sql语句后,您可以提交事务。
根据您的需要调整它,因为我没有测试任何东西。
答案 1 :(得分:0)
据我所知,从一个数据库复制到另一个数据库,但在同一个数据库中从一个表复制到另一个表,这不是一项工作。
你几乎就在那里,改变你的&#34; SELECT ... INSERT&#34;一点:
$code = mysqli_query($con,"INSERT INTO last90Days SELECT * FROM drugCountsByCharge WHERE countyCode ='9999' AND date >= '$d'");
根据计算,$d
从现在开始是90天,因此该条款必须为>= $d
而且,这只有效,如果两个表中的表格布局相同 - 字面意思相同!
否则你可能会使用这样的语句:
INSERT INTO table_b (field_b_a, field_b_b, field_b_c)
SELECT field_a_a, field_a_b, field_a_c from table_a;
(这只是一个例子)
答案 2 :(得分:-1)
希望这会有所帮助,我想
$sql =mysql_query(USE DB_1);
$sql1 =mysql_query(Your select query)
while($res = mysql_fetch_array($sql1)){
$sql3 = mysql_query(USE DB_2);
$sql4 = mysql_query(Your Insert Query);
}