Opened 8 years ago

Closed 8 years ago

#278 closed улучшение (fixed)

Ограничить число результатов поиска записей конференций

Reported by: alx Owned by: dimag
Priority: major Milestone: 1 очередь
Component: ПО MC04-Dispatcher. Пульт диспетчера/техника Keywords:
Cc: san

Description

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

Предлагаю сделать ограничение в SQL запросе кол-ва возвращаемых результатов (LIMIT, OFFSET), и отображать результат страницами (как, например, это сделано в выводе журнала аварий и CDR в плате SW-01).

Change History (16)

comment:1 by dimag, 8 years ago

Александр твоё мнение?

comment:2 by san, 8 years ago

Насчёт ограничения согласен.

А по поводу страниц, предлагаю вместо страниц, при количестве результатов поиска превышающих ограничение:
Вывести результат поиска ввиде N строк(N-ограничение),
а в N+1 строке нарисовать кнопку "Ещё результаты..."
При нажатии этой кнопки начиная с N+1 й строки выводится ещё одна порция из N-результатов и т. д.

comment:3 by dimag, 8 years ago

Александр, уточни это с Ваней, в данном случае измениться интерфейс работы программы, он согласен?

comment:4 by san, 8 years ago

уверен на 100% что он не будет возражать против варианта из моего комента выше
из изменений интерфейса появится только кнопка "Ещё результаты..."

comment:5 by dimag, 8 years ago

Рассмотрим такую ситуацию, получили множество [0..N] результатов, нажали на кнопку "Ещё результаты" получили [N..2N]. Как вернуться обратно к множеству [0..N] результатов?

comment:6 by san, 8 years ago

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

comment:7 by dimag, 8 years ago

Куда кнопку поместить?
Можно под таблицей, можно под фильтром.

comment:8 by san, 8 years ago

И не то и не другое...

Вывести результат поиска ввиде N строк(N-ограничение), а в N+1 строке нарисовать кнопку "Ещё результаты..."
При нажатии этой кнопки начиная с N+1 й строки выводится ещё одна порция из N-результатов и т. д.

Кнопка прямо в таблице, в последней строке.
Допустим N=3
Нажимаем Поиск, результаты:

строка 1
строка 2
строка 3
<ещё результаты...>

Нажимаем кнопку "ещё результаты...", получаем в таблице

строка 1
строка 2
строка 3
строка 4
строка 5
строка 6
<ещё результаты...>

и.т.д.

comment:9 by dimag, 8 years ago

Тут есть тонкий момент, что итоговая таблица формируется из 2 таблиц cdr и recordings.
Надо менять запрос.

comment:10 by san, 8 years ago

Да, действительно, это усложняет ситуацию.
Получается что просто задать лимит в запросе не прокатит...

comment:11 by dimag, 8 years ago

Можно использовать подобный запрос
(SELECT 0 AS call_type, id, startrecord AS sort_time, endtime, xml , conference, has_record, NULL, NULL, NULL FROM cdr WHERE
endtime >= STR_TO_DATE('2016.08.29 10:55:00', '%Y.%m.%d %H:%i:%s') AND starttime <= STR_TO_DATE('2016.08.30 10:55:59', '%Y.%m.%d %H:%i:%s'))
UNION
(SELECT 1 as call_type, id, starttime AS sort_time, endtime, NULL, NULL , NULL , caller, callee, filename FROM recordings WHERE
endtime >= STR_TO_DATE('2016.08.29 10:55:00', '%Y.%m.%d %H:%i:%s') AND starttime <= STR_TO_DATE('2016.08.30 10:55:59', '%Y.%m.%d %H:%i:%s'))
ORDER by sort_time
Он выведен сразу 2 таблицы, оюъединённые в одну, отсортированные по дате начала конференции, для случая конференции будет выводиться 0 в первой колонке, для прямых переговоро 1 в первой колонке.

comment:12 by dimag, 8 years ago

Как вы относитесь к данному запросу, Алексей? Он вас устраивает или можно написать лучше?

comment:13 by dimag, 8 years ago

Предлагаю перенести данный функционал на следующий этап.

in reply to:  12 comment:14 by alx, 8 years ago

Replying to dimag:

Как вы относитесь к данному запросу, Алексей? Он вас устраивает или можно написать лучше?

На первый взгляд здесь все более-менее логично. Разве что поле xml тут явно лишнее...

comment:15 by san, 8 years ago

Milestone: Текущее1 очередь

comment:16 by alx, 8 years ago

Resolution: fixed
Status: newclosed

In 747/dispatcher:

В списке записей переговоров реализовано отображение надписи "Еще..."
если в базе данных содержится больше записей, чем отображено в списке.
При нажатии строки списка с надписью "Еще..." в базе данных напрашивается
следующая "пачка" записей. Closes #278.

Note: See TracTickets for help on using tickets.