说我有信用卡的下拉按钮。
我的订购是:
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无法解决我的问题,因为我无法指定查询中的所有字段,因为表格很大且不断变化。
答案 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'
排序等。