c# - 用于管理 SQL 表中位置的算法

标签 c# sql algorithm

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

欢迎提出建议。

例子

姓名职位

abc 1

def 2

ghj 3

现在我点击按钮,我得到以下内容

姓名职位

定义 1

abc 2

ghj 3

我希望我已经解释清楚了!

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

TABLE1 with 3 columns ID1, ID2, POSITION
ID1 AND ID2 are FK's and the table has a PK based on ID1 and ID2
When I select the data to display I use the following query SELECT NAME, ETC FROM TABLE2 INNER JOIN TABLE1 ON ID1 = ID1 WHERE ID2 = 511 ORDER BY POSITION

Now I need to change the position on two elements so the row in TABLE1 for example 311,511,5 needs to became 311,511,4 and the row that was 433,511,4 needs to became 433,511,5. The opposite.

I hope that this helped to clear out my question.

干杯!

最佳答案

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

如果是这样,要将行向上移动,您需要与上一行交换位置。要向下移动它,您需要对下一行执行相同的操作。根据您的特定 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 上有 UNIQUE 约束(在 Oracle 下确认),这也应该有效。

更多想法,你可以看看this question .

关于c# - 用于管理 SQL 表中位置的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142139/

相关文章:

algorithm - 多选背包

c# - 错误处理整个类

SQL:列表字段包含子列表

sql查询从字段中删除前缀

algorithm - 高效的分布式算法,用于合并具有公共(public)元素的集合

string - 转换一个字符串,使大于 5 的数字表示为几个数字的总和

c# - fubumvc - 将集合呈现为下拉列表

c# - 如何从 T 的自定义实例创建 IOptions<T>(不通过 DI)

c# - 需要修改参数的参数化查询mySQL

mysql - 如何 GROUP_CONCAT 这个查询