我需要能够给用户排序他们的数据的能力。我的模式是这样的:http://sqlfiddle.com/#!2/48100
我想在这个表中添加一个排序列。对于每组giverUserId,排序列应该是一个从1开始的整数。但是,如果存在重复的giverUserId+receiverUserId组合,它们必须保持相同的排序值。
如果我插入一个giverUserId = 23和receiverUserId = 13的新行E,那么它的排序值也应该是2。
用户可以通过更新giverUserId = x和receiverUserId = y的所有行来修改行的排序值。我还会递增/递减因特定行的排序更改而错放的行。我已经把这部分弄清楚了。
我还没有弄清楚的是,如何维护这样一个排序列。我是否应该使用auto_increment,或者是否有其他类似于MySQL的特殊功能可以帮助我完成我想要完成的任务?
我在后台使用JavaScript/Node.js和MySQL。
发布于 2013-06-06 09:08:12
这看起来很复杂。考虑添加一个新表,而不是在此表中处理新列:
create table CustomSortOrder (
giverUserId int,
receiverUserId int,
customOrder int
);然后,您可以在如下查询中使用它:
select ugg.*
from user_generosity_gifts ugg left outer join
CustomSortOrder cso
on ugg.giverUserId = cso.giverUserId and
ugg.receiverUserId = cso.receiverUserId
order by giverUserId, coalesce(cso.customOrder, receiverUserId);通过维护CustomSortOrder表,这为您提供了所需的所有灵活性。您可以很容易地在一个地方为给定的接收者id更新订单。我建议在giverUserId, receiverUserId上建立索引以获得更好的性能。
发布于 2016-07-14 17:02:23
正如所呈现的,这似乎是想过头了(这取决于你的ID号码有多大)。
假设receiverUserId < 100000:
SELECT *
FROM user_generosity_gifts
ORDER BY giverUserId*100000 + receiverUserId;这意味着在插入或更新行时无需维护排序。
我可能误解了问题..。
https://stackoverflow.com/questions/16951822
复制相似问题