2016-07-23 3 views
0

У меня есть таблица товаров из разряда без какого-либо конкретного заказа. Я хочу, чтобы пользователь мог сортировать и прибегать к элементам, насколько важными они считаются. Каков наилучший способ приблизиться к этому? Подумайте о списке дел, которые кто-то может заказать по заказу, в котором они хотят сделать.Лучший способ упорядочить порядок элементов таблицы db?

Я делаю это в php/codeigniter, но общие мысли о приеме очень приветствуются. Благодарю.

+1

Реляционные db не имеют порядка по умолчанию для строк .. вы можете перенести заказ, который вы предпочитаете с помощью order_name в select – scaisEdge

ответ

1

Другими словами, пользователь может упорядочить элементы в произвольном порядке и чтобы заказ сохранялся в базе данных?

Как отмечает один из комментаторов, в базе данных нет встроенного порядка строк. Любому поиску, которому нужны строки в определенной последовательности, необходимо указать желаемую последовательность с помощью предложения ORDER BY.

Для того, что вы предлагаете, вместо того, чтобы включать столбец для хранения информации о заказе непосредственно в вашей таблице данных, я бы предложил таблицу соединения один-на-один с двумя столбцами - одна из которых является первичным ключом для строки и секунда, используемая для хранения целого числа, которое содержит последовательность пользователя. Это позволяет изменять последовательность, не изменяя сами строки (сохраняя кеши и т. Д.). Например, таблица, как:

CREATE TABLE UserSequence(
    key INT UNSIGNED, 
    sequence INT UNSIGNED) 

Если в колонке «ключ» является внешним ключом для первичного ключа таблицы держит ваши строки данных.

Если вы используете довольно большие цифры для последовательности (например, порядковый номер x 1000), вы оставите пространство для пользователей, чтобы создавать новые элементы (или изменять порядок существующих элементов) с приоритетом где-то посередине последовательности без перенумерации всех строк.

Последовательность поиска - это простой вопрос о соединении таблицы UserSequence в вашем запросе и ORDER BY в столбце последовательности.

Также обратите внимание, что вы могли бы установить ограничение уникальности в столбце последовательности, что позволит БД рассказать вам, когда вам нужно отступить и перечислить элементы в соответствии с выбранным вами значением для шага (например, 1000) а не вставки средней последовательности (где, например, значение последовательности выбирается через что-то вроде prev + (next - prev)/2). Также рекомендуется ограничение внешнего ключа на столбец key.

+0

«Другими словами, пользователь может упорядочить элементы в произвольном порядке, быть сохраненным в базе данных? " Да, точно. Благодарю. – ComfortMoose

+0

Прохладный - это предположение, на котором я основывал свой ответ. – thewmo

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