2016-08-12 10 views
1

Скажем, у меня выпадающие кнопки кредитных карт.Как сохранить пользовательский порядок сортировки в Mysql?

Мой упорядоченность:

SELECT * from cards; 

DISCOVER 
MASTER-CARD 
VISA 

Я на самом деле хочу

MASTER-CARD 
VISA 
DISCOVER 

Это нестандартный заказ решил бизнесом.

Так что, хотя поддержания sequence_id в Mysql

DISCOVER 3 
MASTER-CARD 1 
VISA 2 

Так что я могу получить эти поля в порядке их sequence_id.

SELECT * from cards order by sequence_id; 

MASTER-CARD 1 
VISA 2 
DISCOVER 3 

Но проблема в том, что когда мне нужно добавить еще одну карту в таблицу, мне придется настраивать все идентификаторы. Есть ли лучший способ поддерживать последовательность?

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' первой и т.д.

 Смежные вопросы

  • Нет связанных вопросов^_^