2016-08-12 93 views
1

假设我有一个信用卡下拉按钮。如何在Mysql中维护自定义排序顺序?

我的排序是:

SELECT * from cards; 

DISCOVER 
MASTER-CARD 
VISA 

其实我是想

MASTER-CARD 
VISA 
DISCOVER 

这是商业决定自定义的顺序。

所以,我虽然在MySQL

DISCOVER 3 
MASTER-CARD 1 
VISA 2 

保持sequence_id所以我可以在自己的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不能解决我的问题,因为我无法指定查询中的所有字段,因为表格很大并且不断变化。

+1

休假差距使用10,20,30等新的可挤之间英寸这就是为什么旧线编号的编程语言总是有这种方式的行号 – e4c5

+0

谢谢我认为这解决了我的问题。我可以留下50或100的差距进行大量编辑。 – user3184974

回答

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
ORDER BY FIND_IN_SET(card, "MASTER-CARD,VISA,DISCOVER") 

将整理与card = 'MASTER-CARD'第一等