Я ищу наиболее эффективный способ обновления числа строк, выбранных оператором where и order by, чтобы позиции от 1 до n сохранялись в этих строках. Для тех же значений в поле заказа должна быть та же самая позиция, но тогда следующие позиции должны быть пропущены.
ID, catagory_id, price, position
1, 1, 19.99, NULL
2, 2, 9.99, NULL
3, 1, 9.99, NULL
4, 1, 9.99, NULL
5, 1, 2.99, NULL
UPDATE stuff SET position=XXX WHERE category_id = 1 ORDER BY price ASC
ID, catagory_id, price, position
1, 1, 19.99, 4
2, 2, 9.99, NULL
3, 1, 9.99, 2
4, 1, 9.99, 2
5, 1, 2.99, 1
Обратите внимание, что position=2
устанавливается дважды и, следовательно, position=3
опускается.
Возможно ли это с помощью одного SQL-запроса? Я не хочу выдавать заявление об обновлении для каждой строки, поскольку миллионы мне придется обновлять ежедневно.
Без тех же позиций я использовал:
SELECT @row:=0;
UPDATE offers SET position = (@row:=@row+1) WHERE category_id = 1 ORDER BY price ASC;