Лучший способ составить список товаров по заказу - PullRequest
2 голосов
/ 05 июля 2011

Я хочу перечислить элементы по определенному порядку. Поэтому в моей таблице есть столбец заказа, в котором будет храниться номер заказа.Итак, я могу перечислить элементы, используя этот номер заказа. Если количество элементов меньше, значит, нет проблем, но пока оно становится больше.У меня проблемы.

Таблица элементов: -

id   item varorder
1     A1    1
2     A2    2
3     A3    5
4     A4    3
5     A5    4
......
1000  A1k   1000

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

SELECT item FROM tbl_item ORDER BY varorder ASC

В результате запроса меняправильный порядок элементов, таких как A1,A2,A4,A5,A2,...,A1K

Мои проблемы

Проблема возникает, когда я пытаюсь изменить A1K как 1.

  • Используя стрелки вверх и вниз, я могупоменяйте местами элементы или измените порядок элементов, используя предыдущую и следующую стрелки. Если я хочу сделать A1K на первой позиции, я должен нажать стрелку вверх 1000 раз. Это действительно плохая идея для управления элементами.

enter image description here

  • Использование обычного обновления Если я хочу сделать A1K на первой позиции, я должен обновить все строки (1000), чтобы сохранить правильный порядок. Поэтому я не думаю, что это хорошая идея.

Так что предложите мне.Есть еще одна хорошая идея, чтобы сохранить порядок в определенном порядке?

Спасибо

Ответы [ 4 ]

1 голос
/ 05 июля 2011

Добавьте столбец «sortdatechanged» и сделайте его сейчас () при вставке.Затем обновите его, когда вы нажмете стрелку вверх.Когда вы нажмете стрелку вниз, обновите varorder до max (varorder) +1 и установите sortdatechanged на min (sortdatechanged).Затем выберите сортировку по номеру desc, varorder.

0 голосов
/ 05 июля 2011

Обновление строк будет проблемой, потому что это миллионы, а не 1000. В этом случае вы можете иметь varorder и orderupdated, а также упорядочивать по varoder ASC, orderddated DESC. Таким образом, когда 2 записи имеют один и тот же порядок (1), одна, для которой было установлено значение 1, будет первой, а другая - второй.

0 голосов
/ 05 июля 2011

Вы можете рассмотреть редкий порядок, например:

id   item varorder
1     A1    10000
2     A2    20000
3     A3    50000
4     A4    30000
5     A5    40000

Затем вы можете перемещать элемент перед любым другим элементом в списке или между ним, не обновляя каждую строку в таблице. Я бы предложил алгоритм, который добавляет в конец списка, используя varorder, который больше, чем предыдущий varorder, по крайней мере, на 10000, и который обрабатывает вставку между двумя существующими элементами, назначая вставленный элемент a * 1006. * это на полпути между varorder из двух существующих элементов.

Таким образом, в приведенном выше примере перемещение A3 на вторую позицию в списке даст:

id   item varorder
1     A1    10000
2     A2    20000
3     A3    15000
4     A4    30000
5     A5    40000

При очень большом количестве перемещений этот подход в конечном итоге исчерпает пространство в разреженном индексе, поэтому вопрос, который вы должны задать себе, состоит в том, думаете ли вы, что когда-нибудь будет так много повторных заказов Операции на практике.

0 голосов
/ 05 июля 2011

Об интерфейсе пользователя: перетаскивание = лучший способ.

Об обновлениях: Вы можете использовать varcodes, например: 256 512 768 1024 ... Поэтому, когда вы хотите переместить какой-либо элемент, вы обновляете его номер до (lefter+ правее) / 2. В таких случаях, как lefter = 1;правый = 2;(лефтер + правый) / 2 = 1,5;вам нужно запустить некоторую процедуру, которая обновит все элементы до (256 512 768 1024 ...) в соответствии с текущей сортировкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...