我有一个包含文章的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?
答案 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)