我需要根据从 ajax 调用中作为数组列表获得的主键值序列更新排序顺序列。例如,我有 2 个具有值 (23,1)(32,2)(21,3)(43,4) 的列(ID,Sortorder),现在来自前端的用户移动上面的第 3 行(21,3)第二行(32,2),我得到的 ID 数组序列为 23、21、32、43,我必须维护它。从此列表中,我尝试根据顺序更新排序顺序,因此数据库表值应显示为 (23,1)(32,3)(21,2强>)(43,4)。你能帮我得到这个数据库更新声明吗。
附上打印屏幕以便更好地理解:
我有 Java 逻辑,试图找到更新 sql 语句以从数组列表中循环。我的表中有大约 1000 行,根据我的逻辑,这将触发 1000 个更新查询,我认为这效率不高。试图找到一种替代的有效方法。
Connection conn = null;
PreparedStatement pstmt = null;
conn = getConnection();
String query = "update Sortordertable set sortorder = ? where Id = ? ";
pstmt = conn.prepareStatement(query); // create a statement
String str[]=String.valueOf(s.getRecordId()).split(";");//id1;id;id3;.... list I get from ajax call
for(int i=0;i<str.length();i++)
{
pstmt.setId(1,i++); //set sortorder value as 1, 2, 3..
pstmt.setInt(2, str[i]); // In this line I want to use my array-list to update my table.
pstmt.executeUpdate(); // execute update statement
}
最佳答案
对于您展示的特定用例,您可以使用以下查询,该查询将仅更新带有 id=32
的行或 id=23
.
UPDATE t1 SET
sortorder = CASE WHEN id = 32 THEN 3 ELSE 2 END
WHERE id IN (32, 21);
如果您在每次操作后不更新数据库,这可以适用于多次更新。但会随着用户在触发更新前的操作次数而增长。
编辑以解决评论:
如果像您评论中给出的示例一样,您想要将顺序为 4 的行移动到第一行,您可以使用以下命令:
UPDATE t1 SET
sortorder = CASE WHEN sortorder = 4 THEN 1 ELSE sortorder + 1 END
WHERE sortorder <= 4;
我在最后一个查询中添加了一个 where 子句,以说明您可以轻松地使其适应不同的用例。
关于mysql - 根据数组值列表更新数据库排序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34599223/