$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的值结束时开始插入。
答案 0 :(得分:0)
如果你的表Primary Key
有table2
,那会更好,但由于你的子查询只返回一行,你仍然可以在一个查询中组合这两个查询,如下所示: / 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_1
和t2_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
循环条件应为<=
而不是<