我在解决这个问题时遇到了一些麻烦。也许我让它变得比需要的更复杂。我有一张这样的桌子:
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的解决方案。
另外,沿着相同的路线,如果我要在表中插入一个新行,我希望订单值为3.是否有一种有效的方法在SQL中执行此操作,而不必先使用{{1 }}?
答案 0 :(得分:0)
我的评论似乎已经引起了一些关注,所以我将其作为答案发布...为了避免您的问题,添加一个没有约束的新列,并将其用于用户所需的更新。
答案 1 :(得分:0)
为什么不更新订单而不是thingid?
UPDATE tbl
SET order = 2
WHERE thing_id=1;
每一行代表一个“用户 - 用户”对。 数据是您要使用的排序。您不想更改实体(“thing-user”)。您想要更改数据。
顺便说一句,您将需要做一些额外的工作来保持订单中的唯一值。
如果你改变它并将唯一约束放在user_id, order
上,那么更新thing_id是有意义的。