我在想出一个有效的解决方案来解决这个问题时遇到了一些麻烦。也许我让它变得比需要的更复杂。我有一张这样的桌子:
thing_id | user_id | order
1 1 0
2 1 1
3 1 2
用户可能会弄乱他们的东西,并且可能会发生他们将事物 1 更改为事物 3,并将事物 3 更改为事物 1。在我的情况下,并不是用户明确更改了顺序。相反,他们正在修改他们的事物库,他们可能会将槽 1 中的事物更改为槽 3 中的事物,反之亦然。因此,如果用户执行此操作,表格应如下所示:
thing_id | user_id | order
3 1 0
2 1 1
1 1 2
使这更复杂的是 (thing_id, user_id) 具有唯一约束,因此执行顺序更新并不完全有效。如果我尝试这样做UPDATE tbl SET thing_id=3 WHERE thing_id=1
,则唯一约束被打破。
订单栏纯粹是为了展示,以便按字母顺序排列。所以我想我可以使用 PHP 来检查顺序并像这样计算出来,但这会引入与重要内容无关的代码。我想找到一个纯粹/主要是 SQL 的解决方案。
同样,如果我要在表中插入一个新行,我希望 order 值为 3。在 SQL 中是否有一种有效的方法可以做到这一点,而无需先行SELECT MAX(order) WHERE user_id=1
?