在MySQL中为用户定义的顺序排序列

在MySQL中为用户定义的顺序排序列,mysql,Mysql,我需要能够让用户能够对他们的数据进行排序。我的模式如下所示: 我想在此表中添加一个排序列。排序列应该是一个整数,每组giverUserId的值从1开始。但是,如果存在重复的giverUserId+receiverUserId组合,则它们必须保持相同的排序值 因此,如果A、B、C和D行的giverUserId分别为23和11、13、17和13,则每行的排序值应分别为1、2、3和2。如果我插入一个新行E,其中giverUserId=23,receiverUserId=13,那么它的排序值也应该是2。

我需要能够让用户能够对他们的数据进行排序。我的模式如下所示:

我想在此表中添加一个排序列。排序列应该是一个整数,每组giverUserId的值从1开始。但是,如果存在重复的giverUserId+receiverUserId组合,则它们必须保持相同的排序值

因此,如果A、B、C和D行的giverUserId分别为23和11、13、17和13,则每行的排序值应分别为1、2、3和2。如果我插入一个新行E,其中giverUserId=23,receiverUserId=13,那么它的排序值也应该是2。通过这种方式,我可以通过对排序列A、B、D、E、C进行排序来检索具有特定顺序的结果集。即使D和E都有较新的时间戳,但由于排序列的原因,结果集位于C之前

用户可以通过更新giverUserId=x、receiverUserId=y的所有行来修改行的排序值。我还将递增/递减由于特定行的排序更改而错位的行。我对这部分有了大致的了解

我没有弄明白的是,如何维护这样的排序列。我应该使用auto_increment,还是有其他类似MySQL的特殊功能可以帮助我完成我想要完成的任务?我需要弄清楚的是如何编写这样一个INSERT语句,该语句将使用sort=(sort列值,其中giverUserId=x,receiverUserId=y)或MAX(sort列,其中giverUserId=x)进行插入


我在后端使用JavaScript/Node.js和MySQL。

这似乎很复杂。与其处理此表中的新列,不如考虑添加一个新表:

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
上建立一个索引,以获得更好的性能。

如前所述,这似乎考虑过了(取决于您的ID号有多大)

假设接收方用户ID<100000:

SELECT *
FROM user_generosity_gifts
ORDER BY giverUserId*100000 + receiverUserId;
这意味着您在插入或更新行时无需进行排序维护

我可能误解了这个问题