PHP / MySQL更新订单

时间:2012-03-02 14:18:37

标签: php mysql arrays

我有一个包含文章的sql表。我将文章的顺序存储在sql的INT字段中 使用(拖放)UI中的ajax帖子,我得到了一个带整数的数组(新订单) 例如:
旧订单:2,1,3,4
新订单应为:2,1,4,3
PHP:

$i = 1;    
foreach ($inputarray as $var) :
        if ($i != $var) :
            $this->_sqli->query("UPDATE articles 
    SET artorder=$i WHERE artorder = $var and pagesid = $pagesid");
        endif;

    $i++;
endforeach;

问题:当我尝试交换元素时,它们将是相同的。所以上一个例子的输出将是:2,1,4,4 我该如何更新我的sql?

2 个答案:

答案 0 :(得分:1)

您需要传递旧订单以及新订单。然后你可以写

$sz = count ($inputarray);
for ($i = 0; $i < $sz; ++$i):
    // $oldarray holds the old order
   if ($oldarray[$i] != $inputarray[$i]) :
      $this->_sqli->query("UPDATE articles 
         SET artorder=" . $inputarray[$i] . " WHERE artorder = " . $oldarray[$i] . " and pagesid = $pagesid");
      endif;
endfor;

答案 1 :(得分:1)

只要&#34; artorder&#34;是更新行时使用的唯一键。这是因为你会遇到artorder在两行中相同的情况;因此,您不再拥有唯一的密钥。只需在表中添加一个主键,并在UPDATE语句中使用它:

ALTER TABLE articles ADD articleId INT(5) NOT NULL,
ADD PRIMARY KEY (articleId)