我有以下数组$ weight,我想将这些值存储到mysql表中的weight列。
Array
(
[0] => 12
[1] => 14
[2] => 16
[3] => 9
[4] => 7
)
数据库表结构是,
+----------------------------+--------+------+
| Indicators | Weight | Rank |
+----------------------------+--------+------+
| Elevation | 0 | 0 |
| Distance from the sea | 0 | 0 |
| Natural Coastal Protection | 0 | 0 |
| Water Bodies | 0 | 0 |
| Precipitation | 0 | 0 |
+----------------------------+--------+------+
我期待结果为,
+----------------------------+--------+------+
| Indicators | Weight | Rank |
+----------------------------+--------+------+
| Elevation | 12 | 0 |
| Distance from the sea | 14 | 0 |
| Natural Coastal Protection | 16 | 0 |
| Water Bodies | 9 | 0 |
| Precipitation | 7 | 0 |
+----------------------------+--------+------+
尝试了以下查询,但似乎没有插入。
foreach($weight as $value)
{
$insert_weight="UPDATE geographic_main
SET Weight='$value'
WHERE Indicators=('Elevation','Distance from the sea',
'Natural Coastal Protection','Water Bodies', 'Precipitation') ";
我不确定我在WHERE部分是否正确。请建议。 }
答案 0 :(得分:6)
您需要单独执行每个更新,此时您看起来正在混合使用并尝试将所有行更新为一次。你需要一些东西来识别你想要更新的记录,所以我建议你这样做:
$weights = array(
'Elevation' => 12,
'Distance from the sea' => 14,
'Natural Coastal Protection' => 16,
// etc.
);
foreach ($weights as $key => $val) {
$sql = "UPDATE geographic_main SET Weight = '$val' WHERE Indicators = '$key'";
mysql_query($sql);
}
答案 1 :(得分:3)
您可以在表格中添加“index”或“id”列或使用此代码
$index = 0;
$q = mysql_query("SELECT Indicators FROM geographic_main");
while(list($indicator) = @mysql_fetch_row($q)) {
mysql_query("UPDATE geographic_main SET Weight='".$weights[$index++]."' WHERE Indicators='$indicator'");
}
但这不是正确的方法
答案 2 :(得分:2)
你真的需要在你的表中使用id列...因为......我如何认识当前的行? 因此,如果您不想使用id列,则可以创建数组索引或字典/关联数组。
$idx = array(
'Elevation' => 0
,'Distance from the sea' => 1
,'Natural Coastal Protection' => 2
,'Water Bodies' => 3
, 'Precipitation' => 4
);
foreach($idx as $name => $i) {
mysql_query("UPDATE geographic_main SET Weight = '".$weights[$i]."' WHERE Indicators = '".$name."'";
}
但无论如何最好使用id,因为你获得了更多的方法或数据库引擎。
希望这会有所帮助..祝你有个美好的一天
菲利普