2016-08-12 157 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'第一等