Node.js 如何为重新排序的元素编写查询
我正在编写一个代码,它将有一个特定顺序的项目列表,我想随意对它们重新排序。设置并不是很重要,但总而言之,它是一个带有MSSQL数据库的节点服务器 为了便于演示,让我们假设我们正在讨论按特定顺序显示的论坛类别Node.js 如何为重新排序的元素编写查询,node.js,sql-server,stored-procedures,Node.js,Sql Server,Stored Procedures,我正在编写一个代码,它将有一个特定顺序的项目列表,我想随意对它们重新排序。设置并不是很重要,但总而言之,它是一个带有MSSQL数据库的节点服务器 为了便于演示,让我们假设我们正在讨论按特定顺序显示的论坛类别 Id | OrderNumber | Name ------------------------ 1 | 1 | Rules 2 | 3 | Off-topic 5 | 2 | General 8 | 4
Id | OrderNumber | Name
------------------------
1 | 1 | Rules
2 | 3 | Off-topic
5 | 2 | General
8 | 4 | Global
我已经处理了前端,它允许我根据自己的喜好对它们重新排序,问题是当我按下数据库上的“保存”按钮时会发生什么。
理想情况下,我希望以正确的顺序将包含项ID的JavaScript对象发送到服务器上执行存储过程的API端点。比如:
Data = {
IDs:"5,2,8,1"
}
是否有一种方法可以编写一个存储过程,它的唯一参数是ID列表,但它可以遍历该列表并执行一些我只能描述为以下伪代码的操作:
var Order = 1;
foreach ID in Data.IDs
UPDATE Categories SET OrderNum = Order WHERE Id = ID
Order = Order + 1
我最大的问题是我对高级SQL命令不是很有经验,但这是我唯一需要帮助的部分,我已经处理了所有其他事情。谢谢您的帮助。示例
Declare @IDs varchar(max) = '5,2,8,1'
Update A
set OrderNumber=B.RetSeq
From YourTable A
Join (
Select RetSeq = row_number() over (order by (select null))
,RetVal = B.n.value('(./text())[1]', 'int')
From ( values (cast('<x>' + replace(@IDs,',','</x><x>')+'</x>' as xml) )) A(xmldata)
Cross Apply xmldata.nodes('x') B(n)
) B on A.ID=B.RetVal
Id OrderNumber Name
1 4 Rules
2 2 Off-topic
5 1 General
8 3 Global
你必须在这里解释很多。什么定义了“正确的顺序”?你到底在挣扎什么?我强烈建议你阅读你的问题,假装你对你的项目一无所知,看看你是否能够回答这个问题。@SeanLange想象一个有多个部分/类别等的论坛。每个类别按特定顺序显示。比如说1。规则2。将军,3。离题。然后想象一个前端页面,在那里你可以对它们重新排序,当你按下save时,它调用一个数据库过程来更新类别的排序。我正在寻找一种在一个查询中实现这一点的方法。这太模糊了,我甚至不知道从哪里开始。也许你需要看看表值参数?@SeanLange我为这个问题的模糊性道歉。我又写了一遍,希望现在我需要的东西更容易理解。你好。。看你的回复,我不认为这是我需要的,但我确实感谢你的尝试。我已经修改了这个问题,以便更容易理解我到底需要什么帮助。你能再检查一下吗?谢谢你的最新回复。我明天就试试这个。你能详细说明一下“加入”子选项吗?我不确定我是否完全理解Select和From以及From-to之间的任何内容)B。XML与此有什么关系,为什么重要?@DethoRhyne Alias B将通过解析ID的分隔字符串生成一个小表。XML用于解析字符串。