我在SO上看到了很多与此问题有关的问题,但都与我的情况无关。除了进行基本的CRUD操作外,我与SQL专家们无二。因此,我对此非常执着。
我有一张表。
myTable [rID, newsID, OrderPosition] 在哪里;
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。
插入行时,您需要“移动”下面的行以为其留出空间。例如,可以像这样在位置4上插入:
DELETE FROM myTable WHERE OrderPosition = 10; -- If you want the keep the table from growing beyond 10 rows. UPDATE myTable SET OrderPosition = OrderPosition + 1 WHERE OrderPosition >= 4; INSERT INTO myTable VALUES (..., 4);
相反,删除该行后,可以将其“下方”的行向上备份:
DELETE FROM myTable WHERE OrderPosition = 4; UPDATE myTable SET OrderPosition = OrderPosition - 1 WHERE OrderPosition > 4; -- Now you can insert the row on position 10 if desired.
请注意,即使OrderPosition对其具有UNIQUE约束,UPDATE也不会违反它。
[SQL提琴]