2012-03-02 73 views
1

我有一個sql表格,裏面有文章。我在sql中將文章的順序存儲在INT字段中。
隨着(拖放)UI中的ajax帖子,我得到了一個整數數組(新訂單)。
例如:
舊秩序:2,1,3,4
新的順序應該是:2,1,4,3
PHP:
PHP/MySQL更新訂單

$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?

回答

1

只要「artorder」是更新行時使用的唯一鍵,這將不起作用。這是因爲你會遇到artorder在兩行中相同的情況;因此,您不再擁有唯一的密鑰。只需在表中添加一個主鍵並在UPDATE語句中使用它:

ALTER TABLE articles ADD articleId INT(5) NOT NULL, 
ADD PRIMARY KEY (articleId) 
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; 
+0

我得到了與此相同的結果。 :( – appl3r 2012-03-02 14:44:51

+0

是的,我剛剛意識到問題是什麼,使用你的例子,在第3次迭代時,它將artorder從3更改爲4 - 所以有兩行與artorder = 4。在第4次迭代中,它將所有artorder值4到3 :(Doh!是否有另一種方式來唯一引用除artorder以外的行?我認爲你需要這個來避免更新你正在使用的同一列的選擇問題 – 2012-03-02 15:21:31

+0

我要用id來嘗試它, 謝謝。 – appl3r 2012-03-02 15:35:44