我已经定义在我的导航模型的函数执行查询时,我在想,如果有发生的更加“Zendy”方式/执行查询。 我使用的查询,提出了由比尔Karwin在另一个线程这里设定任意的记录顺序。 我试图用一个事先准备好的声明,但在SIGN()函数的值得到报价。
我使用的是PDO适配器为MySQL。
/**
*
*/
public function setPosition($parentId, $oldPosition, $newPosition)
{
$parentId = intval($parentId);
$oldPosition = intval($oldPosition);
$newPosition = intval($newPosition);
$this->getAdapter()->query("
UPDATE `navigation`
SET `position` = CASE `position`
WHEN $oldPosition THEN $newPosition
ELSE `position` + SIGN($oldPosition - $newPosition)
END
WHERE `parent_id` = $parentId
AND `position` BETWEEN LEAST($oldPosition, $newPosition)
AND GREATEST($oldPosition, $newPosition)
");
return $this;
}