Перейти к содержимому


Ошибка в запросе


Сообщений в теме: 12

#1 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 28 Сентябрь 2015 - 17:05

Подскажите в чем ошибка

$result2 = data_select_field(961, "count(f23261) as cnt_rec1", "(date(add_time) = CURDATE() - INTERVAL 30 MINUTE) AND status=0 AND f23261 != 'Разговор состоялся' AND f23261 != 'Не удобно говорить' AND f23251=",$line['ID']);
$row2 = sql_fetch_assoc($result2);
$line['Кол-во неудачных дозвонов за день'] = $row2['cnt_rec1'];

Выбираю записи добавленные сегодня, НО не учитывая записи добавленные за последние 30 минут.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 28 Сентябрь 2015 - 18:05

Так у вас в запросе сравнивается чистая дата, а на нее отнятие 30-ти минут может повлиять разве что в диапазоне от полуночи до полпервого ночи.

Что мешает вам сравнивать непосредственно время?

#3 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 29 Сентябрь 2015 - 09:32

Т.е. нужно использовать CURTIME(), верно?
Но как указать диапазон от 00:00 текущего дня до текущего времени за вычетом 30 минут?
Т.е. если сейчас 13:00, то нужно взять все, что с 0:00 до 11:30

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Сентябрь 2015 - 10:35

Можно проверять одновременно 2 условия: 1) дата равна сегодняшней и 2) время меньше текущего минус 30 минут

#5 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 29 Сентябрь 2015 - 12:18

$result2 = data_select_field(961, "count(f23261) as cnt_rec1", "(date(add_time) = CURDATE() AND date(add_time) = CURTIME() - INTERVAL 30 MINUTE AND status=0 AND f23261 != 'Разговор состоялся' AND f23261 != 'Не удобно говорить' AND f23251=",$line['ID']);
$row2 = sql_fetch_assoc($result2);
$line['Кол-во неудачных дозвонов за день'] = $row2['cnt_rec1'];

верно?

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Сентябрь 2015 - 12:29

Нет. Во-первых, незакрытая скобка в самом начале условия - приведет к ошибке синтаксиса. Во-вторых, во втором условии опять же сравнивается дата: date(add_time), хоть и с curtime (что вообще бессмысленно). В-третьих, во втором условии должно быть не "равно" (почитайте внимательнее что я в предыдущем сообщении написал), т.к. "равно" выдаст только ровно то что было полчаса назад, а не то что было до этого.

P.S: первое условие задано верно.

#7 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 29 Сентябрь 2015 - 13:23

$result2 = data_select_field(961, "count(f23261) as cnt_rec1", "(date(add_time) = CURDATE()) AND (date(add_time) <= CURTIME() - INTERVAL 30 MINUTE) AND status=0 AND f23261 != 'Разговор состоялся' AND f23261 != 'Не удобно говорить' AND f23251=",$line['ID']);
$row2 = sql_fetch_assoc($result2);
$line['Кол-во неудачных дозвонов за день'] = $row2['cnt_rec1'];

Тогда соответственно вот так)
P.S. не совсем понял, что вы имели под пунктом "Во-вторых".

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Сентябрь 2015 - 14:15

Цитата

не совсем понял, что вы имели под пунктом "Во-вторых"

Функция date возвращает дату (2015-09-29), тогда как curtime - время (14:10:12). Есть какой-то смысл в сравнении даты со временем? Зачем вы берете дату (date) от add_time, когда требуется время (time)?

#9 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 29 Сентябрь 2015 - 15:17

Спасибо, получилось.

Еще вопрос: Надо взять записи, добавленные за последний полный час. Т.е. сейчас например 14:21. Нужно взять записи с 13:00 по 13:59.

$result = data_select_field(1250, "count(f35970) as cnt_rec", "(time(add_time) BETWEEN DATE_FORMAT(NOW(),'%Y-%m-%d %H:00:00') AND DATE_FORMAT(NOW(),'%Y-%m-%d %H:59:59')) AND status=0 AND f36300=",$line['Пользователь']);

Что здесь неправильно?

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Сентябрь 2015 - 15:57

Может то, что берется текущий "полный час", а не предыдущий, как вам надо? Т.к. в условии функция now(), выдающая текущие значения, а каких-то операций по вычету из нее часа я не вижу.

Да, и еще в левой части только время (time) от add_time, тогда как в правой (после between) - дата-время целиком.

#11 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 29 Сентябрь 2015 - 16:04

Не подскажете как правильно сделать запрос?) А то потрачу кучу времени на выяснение...
Заранее спасибо

Сообщение отредактировал fabrika-r: 29 Сентябрь 2015 - 16:04


#12 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 29 Сентябрь 2015 - 16:21

Так я фактически все подсказал уже вам. Убираете time из левой части и добавляете вычитание часа из now в правой. В остальном вроде все верно, насколько я разбираюсь.

#13 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 29 Сентябрь 2015 - 17:28

Спасибо! Все получилось





Количество пользователей, читающих эту тему: 5

0 пользователей, 5 гостей, 0 анонимных