2013-03-25 58 views
3

更新与数组元素的整个列我有一个表用户X这样的:在MySQL

id----------text---------num   
1-----------foo-----------0 
2-----------bar-----------0 
3-----------widget--------0 
4-----------widget--------0 
5-----------widget--------0 
6-----------widget--------0 
7-----------widget--------0 
8-----------widget--------0 

我有一个这样的数组:

$numeros = array(30, 50, 60, 70, 90, 110, 130, 150); 

所以我想打一个查询,得到从$ numeros和更新到我的专栏每个结果“编号”(从ID = 1开始)是这样的:

id----------text--------------num   
1-----------foo--------------30 
2-----------bar--------------50 
3-----------widget-----------60 
4-----------widget-----------70 
5-----------widget-----------90 
6-----------widget-----------110 
7-----------widget-----------130 
8-----------widget-----------150 

可以进行更新单个更新(或循环内的多个)查询?怎么样?

+1

但是,您可以在循环中使用预准备语句,并在每次迭代中循环遍历数组绑定不同的值。 – 2013-03-25 19:52:29

+0

这是关系数据库的一个大问题,难以提出垂直请求。如果你想这样做,使用MongoDB和JavaScript! – StenW 2013-03-25 19:55:16

+0

如果你有一个像id一样的迭代列,它并不是那么糟糕。但是,是的,如果一个数字跳过id,然后他拧了 – 2013-03-25 19:57:43

回答

0

你可以尝试这样的事:

$query = "UPDATE userx SET num=? WHERE id=?"; 
for($j = 0, $j < sizeof(numeros); $j++) 
{ 
    $index = $j+1;   
    $stmt = $db->prepare($query); 
    $stmt->bind_param('ii', $numeros[$j], $index); 
    $stmt->execute(); 
} 

所以虽然它不是技术上一个查询,你只写一次

+0

我要去看看杰夫。谢谢 – JuanFernandoz 2013-03-25 20:09:55

+0

我不确定$ j + 1是否可以在bind_param调用中工作,但我的观点是数组从0开始,而id号从1开始,所以你必须把$ j + 1放在那里以某种方式得到正确的关联 – 2013-03-25 20:11:25

+0

是的,这不起作用,但我试图解决这个使用for循环是我想的唯一方法。 – JuanFernandoz 2013-03-25 20:24:19

0

你可以尝试像每一个元素用一个函数调用更新通过for循环的另一个函数。 IE

#CODE TO CONNECT TO Mysql database 
#then call function to update these column elements 
updateColumns(); 
function updateColumns(){ 
    $query = "SELECT column FROM table"; 
    $result = mysql_query($query); 

    if(!$result){ 
     echo "Error message you want.</br>"; 
     echo mysql_error(); 
    } 
    else{ 
     $count = mysql_num_rows($result); 
     if($count){ 
      # There are rows. now check if there is a match 
      while($row=mysql_fetch_array($result)){ 
       #cycle through each row of the $result column 
       foreach($row as $key => $value){ 
        if($key){ 
         updateThisColumnsValue($value); 
        } 
       } 
      } 
     } 
    } 
} 
function updateThisColumnsValue($value){ 
    $query = "UPDATE table SET columnToCHange='newValue' WHERE referenceColumnName = '$value'"; 
    $result = mysql_query($query); 
    if(!result){ 
     error message 
    }# that should be it. 
} 

而且,这里是一个链接的SQL更新功能w3school.sql 我希望这有助于。