我有一小段代码来更新元素的位置
public function moveUp($id) {
$row = $this->find($id)->current();
$kategoria = $row->kategoria;
$position = $row->position;
if($position > 1) {
$data1 = array(
'position' => new Zend_Db_Expr('position - 1')
);
$where1['id = ?'] = $id;
$this->getDefaultAdapter()->update($this->_name, $data1, $where1);
$data2 = array(
'position' => new Zend_Db_Expr('position + 1')
);
$where2['position = ?'] = $position - 1;
$where2['kategoria = ?'] = $kategoria;
$this->getDefaultAdapter()->update($this->_name, $data2, $where2);
}
}问题是只执行第二次更新,而第一次什么也不做。如果我注释掉第二次更新,那么第一次更新就可以正常工作。为什么会这样呢?
另外,我应该检查下一个更小/更大的位置,而不仅仅是+/- 1吗?也就是说,假设应用程序的其他部分中的代码不会在位置列中留下空白。
发布于 2012-09-13 21:33:34
好吧,我想明白了。在第一次更新之后,两行具有相同的position,因此第二次更新会影响两行而不是一行。
通过添加
$where2['id != ?'] = $id; https://stackoverflow.com/questions/12407230
复制相似问题