Opened 8 years ago

Closed 8 years ago

Last modified 7 years ago

#251 closed баг (fixed)

Ошибка фильтрации конференций по времени

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

Description

При указании в панели "Фильтр переговоров" границ времени с 26.07.2016 14:02 по 26.07.2016 14:05 применение фильтра не дает ни одного результата, в то время как в базе данных существует запись о конференции, проходившей с 26.07.2016 14:01 по 26.07.2016 14:06. Очевидно, эта конференция должна была пройти через фильтр.

Change History (10)

comment:1 by san, 8 years ago

Похоже на так и не пофиксеный 3-й пункт #224

Фильтр по времени не срабатывает если совпадает дата "от" и дата "до"

comment:2 by dimag, 8 years ago

Keywords: audio records added
Resolution: fixed
Status: newclosed

in reply to:  1 comment:3 by alx, 8 years ago

Resolution: fixed
Status: closedreopened

Replying to san:

Похоже на так и не пофиксеный 3-й пункт #224

Фильтр по времени не срабатывает если совпадает дата "от" и дата "до"

Нет, в моем условии "от" и "до" разные.

Replying to dimag:

r287

Хм... У меня в r287 по-прежнему не работает - нет результата.
Дима, а у Вас в r287 работает? При задании указанных мной границ фильтр показывает конференцию?

Last edited 8 years ago by alx (previous) (diff)

comment:4 by dimag, 8 years ago

У меня вывелась одна конференция.
Пробовал под Windows и Ubuntu.

comment:5 by alx, 8 years ago

Хм... В моем тесте программа делает такой SQL запрос:

SELECT id, starttime, endtime, xml, conference, has_record FROM cdr WHERE
(starttime) BETWEEN
STR_TO_DATE('2016.07.26 14:02:00', '%Y.%m.%d %H:%i:%s') AND STR_TO_DATE('2016.07.26 14:05:59', '%Y.%m.%d %H:%i:%s')
OR (endtime) BETWEEN
STR_TO_DATE('2016.07.26 14:02:00', '%Y.%m.%d %H:%i:%s') AND STR_TO_DATE('2016.07.26 14:05:59', '%Y.%m.%d %H:%i:%s') ORDER by starttime

Дима, объясните, пожалуйста, каким чудом у Вас отображается 1 конференция, если, как нетрудно проверить, сервер возвращает на этот запрос пустой результат (empty set)....

Теперь давайте рассуждать чисто логически. Есть 4 параметра - время начала и конца конференции (S, E) и два времени, заданные параметрами фильтра (s, e). Для простоты будет считать, что они не совпадают. Очевидно, возможно 6 случаев взаимного расположения этих времен:

  1. S E s e
  2. S s E e
  3. S s e E
  4. s S E e
  5. s S e E
  6. s e S E

Пол логике фильтрации, очевидно, конференция должна проходить через фильтр в случаях 2, 3, 4, 5. Указанные в описании тикета параметры фильтра подпадают под случай 3.

Теперь давайте проанализируем условие запроса. Насколько я вижу, запрашиваются все конференции, Время начала которых попадает между заданными нами временами, или время окончания которых попадает между заданными нами временами. Очевидно, что случай 3 этому условию не удовлетворяет, так как ни время начала конференции (S), ни время окончания (E) не лежит между временами, заданными в фильтре.

Следовательно, условие в SQL запросе неверное, и его требуется исправить.

comment:6 by dimag, 8 years ago

Resolution: fixed
Status: reopenedclosed

r294.
Спасибо что заметили, оказалось что мой запрос возвращает не все конференции какие удовлетворяют условиям.

in reply to:  6 comment:7 by alx, 8 years ago

Replying to dimag:

оказалось что мой запрос возвращает не все конференции какие удовлетворяют условиям.

"Не все" одну? :) :) :)

Условию в описании тикета удовлетворяет ровно одна конференция... :)

in reply to:  6 comment:8 by alx, 8 years ago

Replying to dimag:

r294.

Ой, а зачем так сложно?

SELECT id, starttime, endtime, xml, conference, has_record FROM cdr
WHERE endtime >= STR_TO_DATE('2016.07.26 14:02:00', '%Y.%m.%d %H:%i:%s')
AND starttime <= STR_TO_DATE('2016.07.26 14:05:59', '%Y.%m.%d %H:%i:%s')
ORDER by starttime;

Не???

comment:9 by alx, 8 years ago

Так как ответа не последовало, считаю, что разумной причины для использования такого условия поиска записей нет. Создан ticket:312.

comment:10 by san, 7 years ago

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

Milestone renamed

Note: See TracTickets for help on using tickets.