У меня есть следующий образец таблицы, который называется userz
:
+----+---------------+----------+
| id | sort_position | type |
+----+---------------+----------+
| 1 | -5 | admin |
| 2 | -3 | customer |
| 3 | 1 | customer |
| 4 | 8 | employee |
| 5 | 200 | customer |
+----+---------------+----------+
С Mysql
Если я хочу, чтобы sort_position
всех типов customer
начинался с 0 и ++
до последней строки, удовлетворяющей критерию WHERE
, я могу сделать следующее:
SET @i=-1;
UPDATE userz
SET sort_position=@i:=@i+1
WHERE type = "customer" ORDER BY sort_position;
и я получил бы ожидаемый результат:
+----+---------------+----------+
| id | sort_position | type |
+----+---------------+----------+
| 1 | -5 | admin |
| 2 | 0 | customer |
| 3 | 1 | customer |
| 4 | 8 | employee |
| 5 | 2 | customer |
+----+---------------+----------+
как видите, все клиенты теперь назначены с правильным sort_position
из 0,1,2
Но так как я работаю с Postgre, мне нужно достичь того же с ним. Что я пробовал до сих пор:
DO $$
DECLARE
i integer := -1;
BEGIN
UPDATE userz
SET sort_position=@i:=@i+1
WHERE type = "customer" ORDER BY sort_position;
END $$;
и у меня есть ошибки около =@i:=@i+1
, пробовал другое форматирование, которое я погуглил как =i:=i+1
, но все равно не повезло.