有没有什么方法可以让一条数据插入原来就有的一条数据中,但是这个数据中的数据和原来的不一样,比如,这个库一共有4个字段 id name   date    sex, 第一次输入的时候 id=1,name=jack, 第二次想跟新的时候在表单中只输入了date=222,sex=1,这样如何跟新,如果用update的话,会把name给覆盖成空的,好麻烦,新手求解

解决方案 »

  1.   

    你直接
    UPDATE `tab` SET `date`=222,`sex`=1 WHERE `id`=1;
    这样不就得了?
      

  2.   

    如果一定要全部字段都更新
    那可以
    UPDATE `tab` SET `name`=IF(`name` IS NOT NULL, `name`, 'newVal'), `date`=222,`sex`=1 WHERE `id`=1;但....为什么你的前台没有把name字段传递过来呢??即使他只更新了date和sex字段,但name如果原本就有的情况下,你应该是把name字段传递到前台显示了不是??那传递更新的值到后台的时候顺便把name也传递过来啰
      

  3.   

     $t_profile = $this->get_table_profile('flow');
                $t_flow = $t_profile['table'];

                $t_fields = $opts['t_fields'];
                if (! isset($t_fields))
                    $t_fields = $t_profile['profile_fields'];            if ($t_fields) {
                    foreach ($t_fields as $k) {
                        $p_holders[] = $k . " = '" . addslashes($_REQUEST[$k]) . "'";
                   }
                    $p_holder = join(', ', $p_holders);                $id = addslashes($_REQUEST['loan_id']);

                    if ($id) {
                     $sql = " update $t_flow set $p_holder ";
                     $sql.= " where 1 ";                  if ($id)
                         $sql.= " and loan_id = $id ";
    问题我现在是这样取的,表是flow但是这个表中的字段是分在不同的表单的!我应该如何
      

  4.   

    你的name字段在前台的表单元素中是不是设置了disabled属性??并且设置成true了??
    <input type="text" id="name" disabled=true value='<?php echo $data['name']; ?>' />
    类似这样的??
    如果是这样的话,那后台肯定取不到值,导致name字段更新后变为空,disabled属性的作用“获取表明用户是否可与该对象交互的值。”,如果设置成true,则JS中取不到值,表单也不会传递该值(如果我记得不错的话...)如果是我上面猜测的情况,那把disabled属性去掉,改成readOnly属性吧,然后通过CSS来设置背景色
    如果不是的话...那就改下面这句话$p_holders[] = $k . " = '" . addslashes($_REQUEST[$k]) . "'";
    改成
    $p_holders[] = $k . " = IF(".$k." IS NOT NULL, ".$k.", '".addslashes($_REQUEST[$k])."')";
    这句话会在更新前判断该字段是否为NULL,如果为NULL就更新,否则就保持原值
    但从你帖的PHP来看,应该是属于name值没有被到后台导致的
      

  5.   

    或者就用 PHP 来判断(推荐,因为这里是SQL区,所以我先帖SQL的解决方案)if(!empty($_REQUEST[$k])) $p_holders[] = $k . " = '" . addslashes($_REQUEST[$k]) . "'";
      

  6.   

    改成上面这样的话生成的sql是
    update testtrust_bank.flow set notbyreason = IF(notbyreason IS NOT NULL, notbyreason, '777'), operator1 = IF(operator1 IS NOT NULL, operator1, '777'), date1 = IF(date1 IS NOT NULL, date1, '77'), intro1 = IF(intro1 IS NOT NULL, intro1, '777'), samplename = IF(samplename IS NOT NULL, samplename, ''), projectname = IF(projectname IS NOT NULL, projectname, ''), operator2 = IF(operator2 IS NOT NULL, operator2, ''), date2 = IF(date2 IS NOT NULL, date2, ''), intro2 = IF(intro2 IS NOT NULL, intro2, ''), agencies1 = IF(agencies1 IS NOT NULL, agencies1, ''), price1 = IF(price1 IS NOT NULL, price1, ''), agencies2 = IF(agencies2 IS NOT NULL, agencies2, ''), price2 = IF(price2 IS NOT NULL, price2, ''), agencies3 = IF(agencies3 IS NOT NULL, agencies3, ''), price3 = IF(price3 IS NOT NULL, price3, ''), agencies4 = IF(agencies4 IS NOT NULL, agencies4, ''), price4 = IF(price4 IS NOT NULL, price4, ''), agencies5 = IF(agencies5 IS NOT NULL, agencies5, ''), price5 = IF(price5 IS NOT NULL, price5, ''), operator3 = IF(operator3 IS NOT NULL, operator3, ''), date3 = IF(date3 IS NOT NULL, date3, ''), intro3 = IF(intro3 IS NOT NULL, intro3, ''), stopreason = IF(stopreason IS NOT NULL, stopreason, ''), operator4 = IF(operator4 IS NOT NULL, operator4, ''), date4 = IF(date4 IS NOT NULL, date4, ''), intro4 = IF(intro4 IS NOT NULL, intro4, ''), agenciesname = IF(agenciesname IS NOT NULL, agenciesname, ''), price = IF(price IS NOT NULL, price, ''), sendsamplestime = IF(sendsamplestime IS NOT NULL, sendsamplestime, ''), getsamplestime = IF(getsamplestime IS NOT NULL, getsamplestime, ''), operator5 = IF(operator5 IS NOT NULL, operator5, ''), date5 = IF(date5 IS NOT NULL, date5, ''), intro5 = IF(intro5 IS NOT NULL, intro5, ''), completetime = IF(completetime IS NOT NULL, completetime, ''), companyfeedback = IF(companyfeedback IS NOT NULL, companyfeedback, ''), operator6 = IF(operator6 IS NOT NULL, operator6, ''), date6 = IF(date6 IS NOT NULL, date6, ''), intro6 = IF(intro6 IS NOT NULL, intro6, ''), failurereason = IF(failurereason IS NOT NULL, failurereason, ''), operator7 = IF(operator7 IS NOT NULL, operator7, ''), date7 = IF(date7 IS NOT NULL, date7, ''), intro7 = IF(intro7 IS NOT NULL, intro7, '') where 1 and loan_id = 202 前面的数据还是跟新不进去
      

  7.   

    前面的数据更新不进去可能是因为你该字段的数据类型要求是number类型的,我上面帖的SQL解决方案是把所有字段都当成字符串来看待了(不过从你的PHP脚本来看,貌似你就是那么做的啊...)
    不知道你把上面这SQL语句直接在命令行里输入会出现什么错误??
    不过这种方案不推荐...对于只是某个字段来说可以用用这种方法,如果是像你这样用PHP拼凑出SQL语句的话,还是用PHP的解决方案吧...