((step == undefined || step == 0) && start < end)
UPDATE (
SELECT `id`,
(
SELECT COUNT(*)
FROM `table` AS `c`
WHERE `c`.`city_id` = `x`.`city_id` AND `c`.`rank` <= `x`.`rank`
) AS `r`
FROM `table` AS `x`
) AS `t`
JOIN `table` ON `table`.`id` = `t`.`id`
SET `table`.`city_rank` = `t`.`r`