我们有一个电子商务网站,几年来一直在销售一天的产品。我们有一个可以订购产品的系统,所以'特色'产品处于顶端,而不畅销的产品处于折叠下方的底部。不同长度的产品分类
我们最近推出了几天运行的产品,而不仅仅是一个,但是这对我们的排序算法造成了严重破坏。
以前我们设置一天天基础的产品订单,所以如果我们在第一天有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