powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сортировка
17 сообщений из 17, страница 1 из 1
Сортировка
    #32984444
gribus_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В программе нужна сортировка по вычисляемым полям. База большая, время на отображение должно быть минимальным.
...
Рейтинг: 0 / 0
Сортировка
    #32984509
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну если очень много записей, то только меняя order by, тоесть сортировать на сервере.
...
Рейтинг: 0 / 0
Сортировка
    #32984538
gribus_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это было бы просто, но в базе этих полей нет, они создаются в зависимосити от ситуации, кол-во и типы полей не фиксированы, к тому же работает несколько пользователей.
...
Рейтинг: 0 / 0
Сортировка
    #32984575
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так в зависимости от ситуации можно так:
s_order = " order by a*b a, c||d desc"

sql = s_sql + s_order

иначе придется затягивать все к клиенту,
или сделай разные views
...
Рейтинг: 0 / 0
Сортировка
    #32984627
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аксиома первая : выборки на клиента должны быть небольшими.
Аксиома вторая : сервер железный (при условии соблюдения первой аксиомы).

Следствие 1. вследствие аксиомы 1, при желании можно легко получить любые сортировки любых выборок быстро.

Аксиома третья : Сервер умеет работать с данными.

Теорема 1 : Клиент не умеет работать с данными.
Доказательство : Предположим, что клиент умеет работать с данными. Но сервер также умеет работать с данными согласно аксиоме 3. Тогда зачем нам нужен сервер ? Не понятно. Следовательно наше предположение было не верно и клиент не умеет работать с данными.

Следствие из теор. 1 и аксиомы 3 : Сортировать надо на сервере.
...
Рейтинг: 0 / 0
Сортировка
    #32984670
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если на клиента данных приходит не очень много, (до 5000 записей), а выборка не меняется в течение времени, а представлять данные нужно в различном порядке, то не не вижу смысла напрягать сервер излишними запросами. Проще сделать выборку в вектор, а затем отсортировать так как надо и представлять все пользователю так, как он хочет. Общего правила - не существует.
...
Рейтинг: 0 / 0
Сортировка
    #32985225
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем qsort плох то? Если не очень большой вектор - можно и через пузырьки - быстрее будеть...
...
Рейтинг: 0 / 0
Сортировка
    #32985307
gribus_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gardenmanЕсли на клиента данных приходит не очень много, (до 5000 записей), а выборка не меняется в течение времени, а представлять данные нужно в различном порядке, то не не вижу смысла напрягать сервер излишними запросами. Проще сделать выборку в вектор, а затем отсортировать так как надо и представлять все пользователю так, как он хочет. Общего правила - не существует.

Спасибо всем кто откликнулся. Первоначально я так и думал, что манипуляциями с запросами особой эффективности не получу и прийдётся делать через вектора, алгоитмы быстрой сортировки и т.п.
Если есть ещё оригинальные идеи помогите.
...
Рейтинг: 0 / 0
Сортировка
    #32985863
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сервер то какой ?
...
Рейтинг: 0 / 0
Сортировка
    #32985931
gribus_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TracerА сервер то какой ?

INTRBASE
...
Рейтинг: 0 / 0
Сортировка
    #32986111
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не, interbase не знаю, на мс скл можно создавать indexed view с вычисляемыми полями, с индексом на это поле, и потом тебе нужно отображать сразу всё или можно частями ?
...
Рейтинг: 0 / 0
Сортировка
    #32986178
gribus_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tracerне, interbase не знаю, на мс скл можно создавать indexed view с вычисляемыми полями, с индексом на это поле, и потом тебе нужно отображать сразу всё или можно частями ?

можно частями
...
Рейтинг: 0 / 0
Сортировка
    #32986282
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример вычисляемого поля можешь привести ? лучше со скриптом таблицы
...
Рейтинг: 0 / 0
Сортировка
    #32986439
gribus_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TracerПример вычисляемого поля можешь привести ? лучше со скриптом таблицы

а что это даст? Перелапачиваие таблиц на сортировку не повлияет. вот идею на счёт MS SQL надо попробовать. Благо сервера различные стоят (Oracle, MS SQL, InterBase даже Pervasive есть)
...
Рейтинг: 0 / 0
Сортировка
    #32986543
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Условно говоря, если если вычисляемое поле равно, например, колонка * 100, то ордер можно сделать и по колонке
...
Рейтинг: 0 / 0
Сортировка
    #32986659
gribus_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TracerУсловно говоря, если если вычисляемое поле равно, например, колонка * 100, то ордер можно сделать и по колонке

Идею понял, но линейной зависимости между колонкой и вычисляемой колонкой нет
...
Рейтинг: 0 / 0
Сортировка
    #33065617
Фотография Andrew IF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Oracle можно сортировать по любой функции от значений атрибутов. Если база действительно большая, а время критично, можно построить функциональный индекс.
---------------------------------------------------------------------------
create table test(
a number,
b number);

insert into test values (1,1);
insert into test values (1,2);
insert into test values (2,1);
commit;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 
select * from test order by a+b desc;

         A          B
---------- ----------
         1          2
         2          1
         1          1

select * from test order by power((a-b),3);

         A          B
---------- ----------
         1          2
         1          1
         2          1
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Сортировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]