如何在Mysql中维护自定义排序顺序?
假设我有一个信用卡下拉按钮 我点的是:如何在Mysql中维护自定义排序顺序?,mysql,database-design,database-schema,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
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。
有没有更好的方法来保持顺序
无法解决我的问题,因为我无法指定查询中的所有字段,因为表太大且不断变化。术语
sequence\u 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默认值只是一个技巧,它可以确保新添加的汽车最后一次出现,直到你在意对它们进行排序为止。这完全是可选的
ORDER BY FIND_IN_SET(card, "MASTER-CARD,VISA,DISCOVER")
将首先使用
card='MASTER-card'
等进行排序。留下空白使用10、20、30等新的可以挤在中间。这就是为什么旧的行号编程语言总是以这种方式使用行号的原因。谢谢,我认为这解决了我的问题。我可以留下50或100的空白进行大量编辑。