Sql 自定义排序或订购表格,而无需使用整个shebang

Sql 自定义排序或订购表格,而无需使用整个shebang,sql,sorting,replication,Sql,Sorting,Replication,十年来,我们一直在表上使用相同的自定义排序,我想知道是否还有另一种解决方案涉及较少的更新,特别是今天,我们希望有一个复制/发布日期,不希望复制复制不必要的条目。我查看了嵌套集,但它似乎不适合我们 基表: id | a_sort ---+------- 1 10 2 20 3 30 插入后: insert into table (a_sort) values(15) 第二个位置的条目 id | a_sort ---+------- 1 10 2 20 3 3

十年来,我们一直在表上使用相同的自定义排序,我想知道是否还有另一种解决方案涉及较少的更新,特别是今天,我们希望有一个复制/发布日期,不希望复制复制不必要的条目。我查看了嵌套集,但它似乎不适合我们

基表:

id | a_sort
---+-------
1    10
2    20
3    30
插入后:

insert into table (a_sort) values(15)
第二个位置的条目

id | a_sort
---+-------
1    10
2    20
3    30
4    15
使用以下命令订购表格:

select * from table order by a_sort
并重新调用所有a_排序项,至少更新id=(2,3,4)
当然会产生所需的输出:

id | a_sort
---+-------
1    10
4    20
2    30
3    40
列名、列计数、数据类型、可能的连接、可能的触发器或执行重排序的方式与问题无关。此外,我们还发现了一些非常简洁的方法来快速完成此任务

只有;我们如何才能将数据库中的更新减少到最多1或2个

似乎是一个非常普遍的问题

船长在我看来显然是这样的:“使用a_排序浮点(53),使用ordervaluefirstentry+abs(ordervaluefirstentry ordervaluenextentry)/2的固定值插入。”
但这只允许大约1040个“中间”条目-因此从不求助似乎有点问题;)

你真的没有描述你在用这些数据做什么,所以如果这对你的情况来说是个疯狂的想法,请原谅我:

您可以制作一种“链表”,其中有一列用于“下一个最高值”id,而不是一列值。这会将更新次数减少到最多2次

您可以将其设置为双链接,还可以为下一个最低点设置一列,这将使最大更新次数达到3次

见:

Ooh,这就产生了一个新标签,这是一个很少使用的新标签吗?对不起,我不明白这个问题。Select如何更新任何内容?您会看到一个按_排序的结果集,ID的顺序是任意的,为什么您会在意?向ids添加语义通常不是一个好主意。要添加到djna的注释中,如何处理重复的a_排序值?如果没有,pk应该是a_sort列。@djna:事实上,我不想花更多的时间来解释求助是如何进行的,但如果有助于理解问题,我将在明天早上(~10:00gmt+1)对其进行编辑。不过,问题不在于如何求助,而在于如何“在两个其他现有值之间插入一个具有固定顺序值的表条目,以便以后可以使用sql order by子句对其进行排序/排序”——如果可能的话。任何关于如何不使用与我相同的方法的想法都是最受欢迎的。使用带有ID的链表(在oop中很常见),我在使用递归select语句获取有序数据时会遇到问题。如何编写sql(-92)语句?您可以在客户端轻松地对其进行排序。选择“按链接列排序”,以便首先获得空值(假设为双链接,否则需要一个头部节点),然后循环,直到获得另一个空值。我假设您正在客户端进行排序以进行更新。您也可以使用存储过程来完成。