【问题标题】:How to maintain a custom sort order in Mysql?如何在 Mysql 中维护自定义排序顺序?
【发布时间】:2016-12-19 04:45:07
【问题描述】:

假设我有一个信用卡下拉按钮。

我的订单是:

SELECT * from cards;

DISCOVER
MASTER-CARD
VISA

我真的想要

MASTER-CARD
VISA
DISCOVER

这是由企业决定的自定义订单。

所以我想在 Mysql 中维护一个 sequence_id

DISCOVER 3
MASTER-CARD 1
VISA 2

所以我可以按照它们的 sequence_id 顺序获取这些字段。

SELECT * from cards order by sequence_id;

MASTER-CARD 1
VISA 2
DISCOVER 3

但问题是当我必须在表格中添加另一张卡片时,我将不得不自定义更新所有 ID。 有没有更好的方法来保持顺序?

How to define a custom ORDER BY order in mySQL 不能解决我的问题,因为我无法指定查询中的所有字段,因为表很大并且不断变化。

【问题讨论】:

  • 留出间隙使用 10,20,30 等新的可以挤在中间。这就是为什么旧的行号编程语言总是以这种方式使用行号
  • 谢谢,我认为这解决了我的问题。我可以留出 50 或 100 的差距来进行大量编辑。

标签: mysql database-design database-schema


【解决方案1】:

sequence_id 一词表明您希望使用主键来保存订单信息。我认为这种方法没有任何好处和很多麻烦。但是也提示你还没有主键,这也不好。

只需添加一个专用列:

CREATE TABLE cards (
   id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
   card_name varchar(50) NOT NULL,
   sort_order INT(10) UNSIGNED NOT NULL DEFAULT 9999999,

   PRIMARY KEY (id)
);

...并将您的查询更改为:

SELECT *
FROM cards
ORDER BY sort_order;

默认值 9999999 只是一个技巧,可确保新添加的汽车最后出现,直到您对它们进行分类 - 它完全是可选的。

【讨论】:

    【解决方案2】:
    ORDER BY FIND_IN_SET(card, "MASTER-CARD,VISA,DISCOVER")
    

    将首先使用card = 'MASTER-CARD' 进行排序,依此类推。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-10
      • 2020-07-31
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多