小编典典

SQL表中位置管理算法

algorithm

我有一个小疑问,如何处理以下情况。在数据库表中,我将相关数据保存在不同的列中,最后,我将确切的顺序保存在称为位置的列中。该表绑定到网格。现在,我正在实现可以更改行位置的功能,但是仍然需要更新数据库。我问的是什么最佳实践或最便捷的方法来实现这一目标?

并欢迎提出建议。

名字位置

abc 1

定义2

ghj 3

现在,我单击按钮,然后得到以下信息

名字位置

定义1

abc 2

ghj 3

我希望我已经解释了自己!

根据评论,这是真实的示例:

具有3列ID1,ID2,POSITION
ID1和ID2的TABLE1 是FK,并且该表具有基于ID1和ID2的PK。
当我选择要显示的数据时,我使用以下查询SELECT NAME,ETC FROM TABLE2 INNER JOIN TABLE1 ON ID1 =
ID1 ID2 = 511按位置排序

现在,我需要更改两个元素上的位置,因此表1中的行例如311,511,5需要变成311,511,4,而433,511,4的行需要变成433,511,5。相反。

我希望这有助于清除我的问题。

干杯!


阅读 276

收藏
2020-07-28

共1个答案

小编典典

当您说: “将位置更改为行”时 ,是否意味着要在表格中上下移动行(相对于position顺序)?

如果是这样,要将其上移,您需要position与上一行交换。要向下移动它,您需要对下一行执行相同的操作。根据您的特定SQL方言,从不同行交换值的语法可能类似于以下内容:

UPDATE YOUR_TABLE
SET position =
    CASE position
    WHEN 2 THEN 3
    WHEN 3 THEN 2
    END
WHERE position IN (2, 3)

本示例将第3行向上移动,将第2行向下移动。根据需要替换2和3 …

顺便说一句,即使有一个唯一约束position(在Oracle下确认),这也应该起作用。

2020-07-28