電商平臺商品列表拖拽排序方案
電商平臺中,用戶常常需要自定義商品排序。本文針對分頁商品列表,允許用戶跨頁拖拽排序,且數據庫中商品的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