首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按用户定义的顺序对MySQL中的列进行排序

问按用户定义的顺序对MySQL中的列进行排序
EN

Stack Overflow用户
提问于 2013-06-06 08:09:26
回答 2查看 408关注 0票数 0

我需要能够给用户排序他们的数据的能力。我的模式是这样的: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。

EN

回答 2

Stack Overflow用户

发布于 2013-06-06 09:08:12

这看起来很复杂。考虑添加一个新表,而不是在此表中处理新列:

代码语言:javascript
复制
create table CustomSortOrder (
    giverUserId int,
    receiverUserId int,
    customOrder int
);

然后,您可以在如下查询中使用它:

代码语言:javascript
复制
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上建立索引以获得更好的性能。

票数 1
EN

Stack Overflow用户

发布于 2016-07-14 17:02:23

正如所呈现的,这似乎是想过头了(这取决于你的ID号码有多大)。

假设receiverUserId < 100000:

代码语言:javascript
复制
SELECT *
FROM user_generosity_gifts
ORDER BY giverUserId*100000 + receiverUserId;

这意味着在插入或更新行时无需维护排序。

我可能误解了问题..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16951822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档