使用select更新空属性

时间:2016-11-27 11:57:52

标签: php mysql

            $attrib= array('State', 'one', 'two', 'three', 'four', 'five', 'six');              
            for ($i=0; $i <6; $i++) { 
                $sql= "insert into table(Attribute, col1, col2)
                select '$attrib[$i]', MIN(cast(".$attrib[$i]." as decimal(5,1))), MAX(cast(".$attrib[$i]." as decimal(5,1))) from table2";
                $run_sql= mysqli_query($conn, $sql);
            }

            for ($i=0; $i < 6; $i++) { 
                $sql= "insert into table(col3, col4)
                select MIN(cast(".$attrib[$i]." as decimal(5,1))),  MAX(cast(".$attrib[$i]." as decimal(5,1))) from table2 where Class=1";
                $run_sql= mysqli_query($conn, $sql);
            }

这里的问题是第二个for循环开始插入col3和col4,其中col1和col2的插入结束。所以col3和col4的所有值都是空的我想要更新那些空值而不是在col1和col2的值结束时开始插入。

1 个答案:

答案 0 :(得分:0)

如果你的表Primary Keytable2,那会更好,但由于你的子查询只返回一行,你仍然可以在一个查询中组合这两个查询,如下所示: / p>

$sql = "insert into table(Attribute, col1, col2, col3, col4)
select t2_1.".$attrib[$i].", MIN(cast(t2_1.".$attrib[$i]." as decimal(5,1))), MAX(cast(t2_1.".$attrib[$i]." as decimal(5,1))), MIN(cast(t2_2.".$attrib[$i]." as decimal(5,1))),  MAX(cast(t2_2.".$attrib[$i]." as decimal(5,1)))
from table2 as t2_1, table2 as t2_2
where t2_2.Class = 1";

我正在加入这两个表(两个都是相同的table2)并且我给它们别名t2_1t2_2(您可以更改这两个名称另一个对你更有意义的名字)我正在从他们每个人那里选择我想要的字段。

所以你的代码只有一个循环,看起来像这样:

$attrib = array('State', 'one', 'two', 'three', 'four', 'five', 'six');              
for ($i = 0; $i <= count($attrib); $i++) { 
    $sql = "insert into table(Attribute, col1, col2, col3, col4)
    select t2_1.".$attrib[$i].", MIN(cast(t2_1.".$attrib[$i]." as decimal(5,1))), MAX(cast(t2_1.".$attrib[$i]." as decimal(5,1))), MIN(cast(t2_2.".$attrib[$i]." as decimal(5,1))),  MAX(cast(t2_2.".$attrib[$i]." as decimal(5,1)))
    from table2 as t2_1, table2 as t2_2
    where t2_2.Class = 1";
    $run_sql= mysqli_query($conn, $sql);
}

另请注意,在您for中,不是使用硬编码 6 ,而是让count()更好地获取数组的长度(因为我正在使用在此代码中)由于您的数组中有7条记录,我认为您的for循环条件应为<=而不是<