循环的php如下: for($j=0;$j<count($selectscriptresult);$j++){
$scriptid=$selectscriptresult[$j]['id'];
$wats_id=$productName.'_sc_'.$scriptid;
$updateidsql="update `script` set wats_script_id='$wats_id' where id=$scriptid";
$copyproject->query($updateidsql);

$selectoriginalscriptsql="select * from `script` where project=$source_pid"; 
$selectoriginalscriptresult=$copyproject->query($selectoriginalscriptsql);

$data_tempscript['originalid']=$selectoriginalscriptresult[$j]['id'];
$data_tempscript['originalname']=$selectoriginalscriptresult[$j]['name'];
$data_tempscript['copyid']=$scriptid;
$data_tempscript['copyname']=$selectscriptresult[$j]['name'];
$temp_scriptresult=$temp_script->add($data_tempscript);

}
核心意思就是在一张表中根据一条记录的id来update另外这条记录一个字段。然后去更新另外一张表
目前记录大概有1700条,每次循环个几百次,就失败了,mysql的log中也没有什么体现。
我怀疑是这个循环的效率有问题,请大家帮我看看。

解决方案 »

  1.   

    update table1 inner join table2 on table1.id=table2.id
    set table1.col=table2.col2
      

  2.   

    update table1 ,table2 set table1.col=table2.col2 where table1.id=table2.id 可以么?
      

  3.   

    可能是我没有说清楚,数据应该这样的
    id  temp_id  name
    1             a
    2             b
    3             ctemp_id是根据id来做的,比如分别设置为sc_1,sc_2和sc_3,
    这样的记录大概有1700条,我是用一个for循环来做的,觉得好像效率不高。各位给的办法都是还有另外一张表,现在没有那张表啊。
      

  4.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  5.   

    表结构是这样的create table test1
    (
    id varchar(10) AUTO_INCREMENT,
    temp_id  varchar(10),
    name varchar(20)
    )
    insert into test1(name) values('a1')
    insert into test1(name) values('a2')现在要更新test1中temp_id的值,它的构成规则是这样的,两个字符sc加上id值,像上面两条记录如果id是1和2的话,temp_id就应该是sc_1和sc_2
    现在是这样的情况,id值是系统自动生成的,我必须先得到id值,然后再得到temp_id值。
    写了一个循环就是类似于顶贴这样的:for($j=0;$j<count($selectscriptresult);$j++){
        $scriptid=$selectscriptresult[$j]['id'];//从这里能得到id值,是另外一个sql得到的
        $temp_id='sc_'.$scriptid;
        $updateidsql="update `test1` set temp_id='$temp_id' where id=$scriptid";//更新temp_id
        $copyproject->query($updateidsql);
    }目前记录大概有1700条,每次循环个几百次,就失败了,mysql的log中也没有什么体现。我怀疑是这个循环的效率有问题,请大家帮我看看。
      

  6.   

    你期望的结果是什么样?直接 update test1 set temp_id  =concat('sc',id); 哪不符合你的要求。
      

  7.   

    谢版主的这条简单的语句,这样是可以的。
    我想知道用循环来做会造成mysql效率的问题吗?或者会造成mysql连接有问题吗?