如何通過拖動實現商品列表的排序,同時最小化對現有系統的改動?

如何通過拖動實現商品列表的排序,同時最小化對現有系統的改動?

電商平臺商品列表拖拽排序方案

電商平臺中,用戶常常需要自定義商品排序。本文針對分頁商品列表,允許用戶跨頁拖拽排序,且數據庫中商品的sort字段初始值為0,列表按時間倒序排列的情況,提出一種低成本、最小化改動現有系統的排序算法設計方案。

核心策略是利用數據庫的sort字段,通過算法動態調整排序值,實現拖拽排序效果。

1. 初始化排序值:

首先,為每個商品分配初始sort值。為了預留足夠排序空間,我們采用較大間隔,例如1000。sql語句如下:

SET @sort := 0; UPDATE product SET sort = (@sort := @sort + 1000) ORDER BY id;

執行后,商品sort值按id順序遞增1000。例如:

id sort
1 1000
2 2000
3 3000

2. 拖拽排序算法:

用戶拖拽商品時,我們計算新位置前后商品sort值的中間值,作為該商品新的sort值。 為了避免排序值過于集中,可在中間值中加入少量隨機偏移量。例如,將id為3的商品拖動到id為1和id為2之間:

新 sort 值 = 1000 + (2000 - 1000) / 2 + 隨機偏移量

更新后的排序:

id sort
1 1000
3 1500 + 隨機偏移量
2 2000

3. 排序值重分配 (可選):

經過多次拖拽后,sort值可能過于密集,影響排序精度。此時,可以重新分配sort值,保持一定間隔:

SET @sort := 0; UPDATE product SET sort = (@sort := @sort + 1000) ORDER BY sort;

此方案無需修改商品添加和修改邏輯,僅需在拖拽排序時更新sort值,并可選擇性地進行重分配,有效且低成本地實現了商品列表的拖拽排序功能。 分頁功能對算法本身沒有影響,因為算法只關注sort值的大小關系。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享