1

语境

我正在开发一个小型网络应用程序来存储照片。照片是根据时间戳(拍摄日期)排序的,效果很好。这是数据库的简化视图:

+--------------+-------------------+
|      id      |     timestamp     |
+--------------+-------------------+
|       1      |    1000000003     |
|       2      |    1000000000     |
+--------------+-------------------+

现在我想添加重新排序照片的可能性。而且我找不到没有任何缺点的方法。

我做了什么

我首先在表格中添加了一列以保存自定义订单。

+--------------+-------------------+-------------+
|      id      |     timestamp     |    order    |
+--------------+-------------------+-------------+
|       1      |    1000000003     |      1      |
|       2      |    1000000000     |      2      |
+--------------+-------------------+-------------+

第一个问题:我相信我不能根据两个不同的标准来排序照片,因为很难知道哪个必须优先。

所以我使用order列来订购它们,而且只有这一列。当我添加order列时,我给每张照片一个值,以便保持当前顺序。我现在有按order订购时的顺序排列的照片timestamp

我现在可以手动重新排序一些照片,而其他照片将保留在它们所属的位置。第一个问题已经解决了。

但现在,我想添加一张新照片。

第二个问题:我知道我添加的新照片是什么时候拍摄的,但我的照片不再按他们的顺序排列timestamp了。这张照片需要正确排序,因此它需要一个正确的order值。

这就是问题所在:正确 order的值。

以下是我可以处理新照片的两种方法:

  • 给它一个order比其他更大的价值。在前面的表格中,将给出一张新照片order = 3。这显然是一个坏主意,因为它没有考虑其时间戳。最近的照片仍将是最后显示的照片。
  • 根据其时间戳将其“插入”它所属的位置。再看同一张表,如果新照片的时间戳为1000000002,则给出新照片order = 2order每张照片的 都加 1。

第二种解决方案看起来不错,除了在一种情况下:如果手动将照片 #2 的顺序更改为 50,order = 50即使它属于第一张照片(根据其时间戳),也会给出新照片。

我需要的

我需要的是一种根据时间戳手动设置的顺序对照片进行排序的方法。

也许您对我强调的第二个问题有解决方案,或者您可能知道解决此问题的另一种方法。不管怎样,谢谢你的帮助。

4

1 回答 1

0

在您的问题中,您从未提及计算机或编程语言。这没关系(实际上,这是一个很好的方法,在编码之前将问题和解决方案写在纸上),这是一个也忽略计算机和编程语言的答案。

把你所有的照片按照你拿到它们的顺序放进一个鞋盒里。

现在,拿三张纸:

在第 1 页上写下从 1 到 N 的数字(一个到一行)(盒子可以容纳的照片数量)。每当您将照片放入盒子中时,请在与其在盒子中的顺序相对应的行上写下其时间戳。

在第 2 页上,将照片 1 的时间戳记下几行。在同一行写一个 1。对于下一张照片,在纸上的适当位置写下它的时间戳,上下留出尽可能多的空间,以便将来插入照片。在同一行写一个 2。继续直到行之间的空间用完,当您需要将所有信息复制到具有更多插入空间的新版本页面上时。此页的信息与第 1 页的信息相同,但每行的两个数字交换位置。

在第 3 页再次写下从 1 到 N 的数字。当您收集每张照片时,将第 1 页上的编号(即所有照片编号顺序中的编号)写在您手动设置排序的正确位置。您可能需要在此页面上进行大量的删改和重写,因为您决定应将后来者插入此页面的高位。

现在你有:

  • 存放照片的商店,鞋盒;您应该已经意识到您不能一次存储多个订单的照片;
  • 三个索引(如果您愿意,可以使用索引);第一个是固定的,只是为每张照片分配一个唯一的序列号;它还会告诉您框中每张照片的时间戳;
  • 第二个索引使您可以在给定时间戳的情况下找到照片的唯一序列号,然后在鞋盒中找到该照片;
  • 第三个索引可让您随意订购照片;每行的第一个数字是排序顺序中的序列号,第二个数字是第一个索引中照片的唯一序列号。

所有这些都是一种非常冗长的方式告诉您,由于您不能(在鞋盒或计算机化数据存储中)同时保存多个订单的照片,因此您必须为您希望的订单维护索引采用。这些索引直接或间接地从一个数字指向鞋盒中的某个位置(这就是索引的作用)。

于 2012-09-30T15:22:37.157 回答