我們有一個電子商務網站,幾年來一直在銷售一天的產品。我們有一個可以訂購產品的系統,所以'特色'產品處於頂端,而不暢銷的產品處於摺疊下方的底部。不同長度的產品分類
我們最近推出了幾天運行的產品,而不僅僅是一個,但是這對我們的排序算法造成了嚴重破壞。
以前我們設置一天天基礎的產品訂單,所以如果我們在第一天有5種產品的銷售,我們會設置它像這樣在數據庫:
Position | Product
----------------------
1 | Product # 1
5 | Product # 2
4 | Product # 3
2 | Product # 4
3 | Product # 5
然後我們可以拉一天中的產品清單,按位置排序和顯示。但是現在,我們必須補償跨多天運行的產品,因此可能會在多天內擁有多個職位。我們認爲,我們可以很容易地調整我們的算法,在整個產品的表像這樣運行:
Position | Product
----------------------
51 | Product # 1
75 | Product # 2
69 | Product # 3
62 | Product # 4
66 | Product # 5
這些產品仍然以相同的順序,因爲他們原本,但位置是基於表中的每一個產品,而不僅僅是那一天。這給我們一個日曆,這是我們所期望的(該數字是產品表中的當前位置):
問題出現在我們要重新訂購產品時。如果我們的產品#6運行了3天,它可能會有64位,這使得它在當天#4和#3以上,但是當我們重新訂購這些產品時,它會移動並獲得jQuery UI數據在與任何事物無關的名單中,雖然我們知道產品與其他日子的關係,但我們不知道這些日子是如何相互關聯的。
我們現在每次放置後都會有回調觸發,所以我們只需要處理一次正在移動的產品。這減少了我們需要做的計算,但我們寧願一次設置訂單並從那裏進行處理。這也給用戶一箇中止的機會。
這是我們目前的排序算法插入該產品在兩個人之間:
public function setPosition($after, $before)
{
// Get products which this product is after and before
$after = $this->find($after);
$before = $this->find($before);
// Move all items down to clear a space for the product
$this->where('position', '>', $before->position)->update(array('position', DB::raw('position + 1')));
$this->position = $after->position + 1;
$this->updateUniques();
}
我們相信我們不僅誰也遇到了這個問題,認爲必須有辦法的人解決這個問題。
-sorry我啞巴的問題,但你如何生成這些表格文本? – Bonik
四個空格然後一些破折號 – sjdaws