语境
我正在开发一个小型网络应用程序来存储照片。照片是根据时间戳(拍摄日期)排序的,效果很好。这是数据库的简化视图:
+--------------+-------------------+
| 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 = 2
,order
每张照片的 都加 1。
第二种解决方案看起来不错,除了在一种情况下:如果手动将照片 #2 的顺序更改为 50,order = 50
即使它属于第一张照片(根据其时间戳),也会给出新照片。
我需要的
我需要的是一种根据时间戳和手动设置的顺序对照片进行排序的方法。
也许您对我强调的第二个问题有解决方案,或者您可能知道解决此问题的另一种方法。不管怎样,谢谢你的帮助。