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 , 8 years ago
comment:2 by , 8 years ago
Насчёт ограничения согласен.
А по поводу страниц, предлагаю вместо страниц, при количестве результатов поиска превышающих ограничение:
Вывести результат поиска ввиде N строк(N-ограничение),
а в N+1 строке нарисовать кнопку "Ещё результаты..."
При нажатии этой кнопки начиная с N+1 й строки выводится ещё одна порция из N-результатов и т. д.
comment:3 by , 8 years ago
Александр, уточни это с Ваней, в данном случае измениться интерфейс работы программы, он согласен?
comment:4 by , 8 years ago
уверен на 100% что он не будет возражать против варианта из моего комента выше
из изменений интерфейса появится только кнопка "Ещё результаты..."
comment:5 by , 8 years ago
Рассмотрим такую ситуацию, получили множество [0..N] результатов, нажали на кнопку "Ещё результаты" получили [N..2N]. Как вернуться обратно к множеству [0..N] результатов?
comment:6 by , 8 years ago
После нажатия кнопки, предыдущие результаты не пропадают, просто начиная со строки где была кнопка выводятся следующие N-строк.
comment:8 by , 8 years ago
И не то и не другое...
Вывести результат поиска ввиде N строк(N-ограничение), а в N+1 строке нарисовать кнопку "Ещё результаты..."
При нажатии этой кнопки начиная с N+1 й строки выводится ещё одна порция из N-результатов и т. д.
Кнопка прямо в таблице, в последней строке.
Допустим N=3
Нажимаем Поиск, результаты:
строка 1 строка 2 строка 3 <ещё результаты...>
Нажимаем кнопку "ещё результаты...", получаем в таблице
строка 1 строка 2 строка 3 строка 4 строка 5 строка 6 <ещё результаты...>
и.т.д.
comment:9 by , 8 years ago
Тут есть тонкий момент, что итоговая таблица формируется из 2 таблиц cdr и recordings.
Надо менять запрос.
comment:10 by , 8 years ago
Да, действительно, это усложняет ситуацию.
Получается что просто задать лимит в запросе не прокатит...
comment:11 by , 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 в первой колонке.
follow-up: 14 comment:12 by , 8 years ago
Как вы относитесь к данному запросу, Алексей? Он вас устраивает или можно написать лучше?
comment:14 by , 8 years ago
Replying to dimag:
Как вы относитесь к данному запросу, Алексей? Он вас устраивает или можно написать лучше?
На первый взгляд здесь все более-менее логично. Разве что поле xml тут явно лишнее...
comment:15 by , 8 years ago
Milestone: | Текущее → 1 очередь |
---|
Александр твоё мнение?