2015-09-20 121 views
1

保存在MySQL数据我有一个表,每个月必须通过更新,因为我上载服务器上的文本文件并将其保存在临时表中,娄代码显示它:通过存储过程

$result_emp = "LOAD DATA LOCAL INFILE'".$myFile_emp."' INTO TABLE infemptemp COLUMNS TERMINATED BY ','"; 

再经过成功地更新和插入“infemptem”表中的新数据,我应该比较主表的“infemp”,已通过“infemptemp”旧数据有新的数据的数据,做这种情况下我写娄代码:

$viwe_emp =mysqli_query($conn,"select * from infempsame where 1"); 
       $NumRows_emp=mysqli_num_rows($viwe_emp); 
       //echo $NumRows_vam; 
       $i=0; 

       while(($row=$viwe_emp->fetch_assoc())!=NULL) 
       { 
       $prsid1=$row['PrsID']; 
       $AccID1=$row['AccID']; 
       $numid1=$row['NumID']; 
       $sql2="select * from infempsame where prsID='".$prsid1."';"; 
       if (mysqli_query($conn,$sql2)) 
        { 
        $sql2_update="UPDATE `infemp` SET AccID='".$AccID1."',NumID='".$numid1."' WHERE prsID='".$prsid1."';"; 
        if(mysqli_query($conn,$sql2_update)) 
        { 
        $i+=1; 
        } 
        }// end if (mysqli_query($conn,$sql2)) 

      }// end while insert new fields of infvam 

注意到代码并且在我的数据库的“insempsame”表中有3500条记录,wh我想更新“感染”表,浏览器发生超时。 我想如果按程序写上面的代码,我的问题就解决了。 这是真的吗?我如何编写程序并致电或使用它? 最好的问候。

回答

1

存储过程会过度。有一种更好的方式隐藏起来,但它只是一个非常简短的提及manual

您也可以执行覆盖多个表的UPDATE操作。 但是,不能使用ORDER BY或LIMIT与多表 UPDATE。 table_references子句列出了 连接中涉及的表。其语法在第13.2.9.2节“JOIN语法”中描述。这里 是一个例子:

UPDATE items,month SET items.price=month.price WHERE 
items.id=month.id; 

因此,你可以写一个简单的查询,以摆脱这样的PHP脚本。

UPDATE infemp, infemptemp 
    SET infemp.AccID=infemptemp.AccID, 
    infemp.NumID=infemptemp.numID 
WHERE infemp.prsID=infemptemp.prsID; 

如果您在prsID列上有一个索引,这应该很快完成。

+1

嗨亲爱的,非常感谢,它解决了我的问题,您的答案改变了我对sql语句的看法,并在编程中使用它们。 –