diff --git a/classes/Feature.php b/classes/Feature.php index 6d9c2dc7e..c0c3c0105 100644 --- a/classes/Feature.php +++ b/classes/Feature.php @@ -313,19 +313,30 @@ class FeatureCore extends ObjectModel public static function cleanPositions() { $return = true; - $sql = ' - SELECT `id_feature` - FROM `'._DB_PREFIX_.'feature` - ORDER BY `position`'; - $result = Db::getInstance()->executeS($sql); + CREATE TEMPORARY TABLE `'._DB_PREFIX_.'feature_tmp` ( + `rank` INT NOT NULL AUTO_INCREMENT, + `id_feature` int not null, + `position` int not null, + primary key(rank) + ); + INSERT INTO '._DB_PREFIX_.'feature_tmp(id_feature,position) SELECT id_feature,position FROM '._DB_PREFIX_.'feature ORDER BY position ASC; + UPDATE `'._DB_PREFIX_.'feature` f LEFT JOIN '._DB_PREFIX_.'feature_tmp t USING(id_feature) SET f.position = rank-1'; + $return = Db::getInstance()->executeS($sql); + if (!$return) { + $sql = ' + SELECT `id_feature` + FROM `'._DB_PREFIX_.'feature` + ORDER BY `position`'; + $result = Db::getInstance()->executeS($sql); - $i = 0; - foreach ($result as $value) - $return = Db::getInstance()->execute(' - UPDATE `'._DB_PREFIX_.'feature` - SET `position` = '.(int)$i++.' - WHERE `id_feature` = '.(int)$value['id_feature']); + $i = 0; + foreach ($result as $value) + $return = Db::getInstance()->execute(' + UPDATE `'._DB_PREFIX_.'feature` + SET `position` = '.(int)$i++.' + WHERE `id_feature` = '.(int)$value['id_feature']); + } return $return; }