gpt4 book ai didi

sql - 根据 SQL Server 位置重新排序行

转载 作者:行者123 更新时间:2023-12-04 23:44:59 24 4
gpt4 key购买 nike

我在 SO 上看到过很多关于这个问题的问题,但没有一个与我的场景相关。除了执行基本的 CRUD 操作外,我离 SQL 家伙还差得很远。因此,我非常坚持这一点。

我有一张 table 。

myTable [rID, newsID, OrderPosition] 其中;

rID is primaryKey int column, 
newsID int is the ID of an item from another table and,
OrderPosition int to hold the position of the rows.

myTable 总有 10 行。

因此,首先,我们假设 myTable 具有以下数据:

rID    newsID    OrderPosition
100 4000 1
101 4100 2
102 4200 3
103 4300 4
104 4400 5
105 4500 6
106 4600 7
107 4700 8
108 4800 9
109 4900 10

预期的功能应该如下;

插入新的

插入新项目时,用户应该能够将其插入到他/她想要的任何位置。现在,我只能通过删除 OrderPosition = 10 行、将新记录 OrderPosition 指定为 0 并重新排序表来设法将新记录插入到第一个位置。但是客户想要选择项目应该放在哪个位置。我假设在哪种情况下,OrderPosition = 10 将再次被删除?

删除

当从这个表中删除一条记录时,由于总有10条记录,我需要从另一个表[tblNews]中获取最新输入的记录并将其插入到第10个位置(我可以得到最后一个通过按输入日期降序从 tblNews 记录。)因为我不知道他们将删除哪条记录,所以我不知道如何在删除记录后对表重新排序。

非常感谢对文章的任何帮助、代码和指导。

=========== 编辑 ====================

答案中提到的 UPDATE 方法对我不起作用;例如用户想在第 5 顺序位置插入一条新记录。这意味着,订单位置 10 将被删除,订单位置为 5、6、7、8 和 9 的当前记录将递增 1

最佳答案

我想这样的东西对你有用:

CREATE PROC uspMyTableInsert
(
@newsID INT, @order int
)
AS
BEGIN

UPDATE MyTable
SET OrderPosition = OrderPosition + 1
WHERE OrderPosition >= @Order;

INSERT INTO MyTable VALUES (@newsID, @order);

DELETE FROM dbo.myTable WHERE OrderPosition = 11


END

因此,要插入您有 3 个步骤:

首先您更新要遵循的项目顺序 (+1),然后插入您的项目,最后删除第 11 行。

与删除类似 - 也是 3 个步骤,但首先删除该行,然后更新后续行的顺序(这次是 -1),最后插入新的第 10 行。

CREATE PROC uspMyTableDelete
(
@order int
)
AS
BEGIN

DELETE FROM dbo.myTable WHERE OrderPosition =@order

UPDATE MyTable
SET OrderPosition = OrderPosition -1
WHERE OrderPosition > @Order;

INSERT INTO MyTable
SELECT TOP 1 newsID, 10
FROM tblNews ORDER BY newsID DESC


END

SQLFiddle DEMO

关于sql - 根据 SQL Server 位置重新排序行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17271727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com