我正在尋找最有效的方法來更新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