如何在Mysql中维护自定义排序顺序?

时间:2016-08-12 08:30:06

标签: mysql database-design database-schema

说我有信用卡的下拉按钮。

我的订购是:

SELECT * from cards;

DISCOVER
MASTER-CARD
VISA

我其实想要

MASTER-CARD
VISA
DISCOVER

这是由商家决定的自定义订单。

所以我在Mysql中维护了sequence_id

DISCOVER 3
MASTER-CARD 1
VISA 2

所以我可以按顺序列出这些字段。

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无法解决我的问题,因为我无法指定查询中的所有字段,因为表格很大且不断变化。

2 个答案:

答案 0 :(得分:2)

术语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默认只是确保新添加的汽车最后出现的技巧,直到您关心它们 - 它完全是可选的。

答案 1 :(得分:1)

ORDER BY FIND_IN_SET(card, "MASTER-CARD,VISA,DISCOVER")

将首先与card = 'MASTER-CARD'排序等。

相关问题