我正在寻找最有效的方法来更新where和order by语句所选择的行数,以便将位置1到n保存到这些行中。对于排序字段中的相同值,应该有相同的位置,但是接下来的位置将不得不被跳过。使用MySQL有效地将升序保存到行数
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:[email protected]+1) WHERE category_id = 1 ORDER BY price ASC;
差不多,但我想以不同的方式在相同的价格下行多行。而不是1,2,2,3,我想1,2,2,5。我调整了你的答案并纠正了一些错别字。感谢您的回答。这对我很有帮助。 – Jan 2012-03-31 11:21:09