Что лучший способ состоит в том, чтобы сохранить порядок сортировки в SQL?

Парни наверху хотят, чтобы порядок сортировки был настраиваем в нашем приложении. Таким образом, у меня есть таблица, которая эффективно определяет тип данных. Что лучший способ состоит в том, чтобы сохранить наш порядок сортировки. Если я просто создал новый столбец под названием 'Порядок' или что-то, каждый раз, когда я обновил порядок одной строки, я предполагаю, что должен был бы обновить порядок каждой строки гарантировать потомство. Существует ли лучший способ сделать это?

23
задан Anthony 13 May 2010 в 01:38
поделиться

4 ответа

Ни один из ответов до сих пор не затрагивал настоящую проблему с настраиваемым порядком сортировки, а именно то, что происходит, когда два разных человека хотят, чтобы одни и те же записи были отсортированы по-разному.

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

Я сделал это однажды в приложении для написания предложения, потому что нам нужно было иметь возможность отсортировать части и задачи в предложении в том порядке, который, по нашему мнению, будет наиболее впечатляющим для клиента. Даже тогда нам пришлось установить порядок по умолчанию, так что им нужно было перемещать только две или три вещи, которые они действительно хотели показать первыми, вместо того, чтобы заказывать 10 000 отдельных деталей.

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

Вам действительно нужно обсудить это требование с руководством и получить подробную информацию о том, как они хотят, чтобы оно работало, кроме того, я хочу индивидуальный заказ. Часто люди думают, что это одна из тех вещей, которые они хотят, но на самом деле не используют.

14
ответ дан 29 November 2019 в 02:52
поделиться

Вместо этого вы можете использовать число с плавающей запятой, и пока у вас достаточно точности, вы всегда можете просто установить порядковый столбец для перемещенной записи на середину между записями по обе стороны.

0
ответ дан 29 November 2019 в 02:52
поделиться

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

Если требуется иметь заказы типа B A Z T Q M K, тогда вам понадобится столбец для размещения относительного порядка. Соответствующее значение нужно будет определять каждый раз, когда вы добавляете строку. Однако это хорошо работает для кодовых таблиц, которые относительно статичны.

0
ответ дан 29 November 2019 в 02:52
поделиться

Используйте поле типа int. Когда вы обновляете порядок сортировки одной строки, вам нужно только обновить поле в строке, которую вы обновляете, и любые строки между старой и новой позициями строки. Это означает, что при замене двух строк нужно коснуться только этих двух строк. Кроме того, для обновляемых строк, которые не являются вашей «активной» строкой, вам нужно только увеличивать или уменьшать значение поля; запросы легко писать.

1
ответ дан 29 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: