Я определил функцию в моей навигационной модели, которая выполняет запрос, и мне было интересно, есть ли способ генерации / выполнения запроса «Zendy». Запрос, который я использую, был предложен Биллом Карвином в другом потоке здесь для установки произвольного порядка записи. Я попытался использовать подготовленный оператор, но значения в функции 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; }