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


Не срабатывают вычисления


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

#1 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 22 Июль 2014 - 16:25

Почему -то перестало работать условие тек. пользователь = полю типа пользователь или поле пользователь = полю типа пользователь. Посмотрите пожалуйста может это у меня в коде проблема:

$res = data_select_field(47, "id","`f9332`='новый' AND `f492`=",$user['id']);получаю задания у которых статус = новый
    while($row = sql_fetch_assoc($res))
    {
	    $mas[]=$row['id'];
    }
$line['очередь'] = count($mas); //считаю сколько заданий в очереди

// Среднее время принятия задания
$res1 = data_select(47, "`status`=0 `f492`=",$line['Пользователь']," AND `f9452`!=0");// получаю время принятия задание при условии что оно не равно 0 и исполнителем задания является пользователь из тек. записи
    while ($row1 = sql_fetch_assoc($res1))
    {
	    $mas1[] = $row1['время принятия'];
    }
 
$kolvo = count($mas1);
$avg = array_sum($mas1)/$kolvo;
$line['Среднее время принятия задания'] = $avg;
   
// Среднее время выполнения задания
$res2 = data_select(47, "`status`=0 AND `f492`=",$line['Пользователь']," AND `f9372`!=0");// получаю время выполнения задания при условии что оно не равно 0 и исполнителем задания является пользователь из тек. записи.
    while ($row2 = sql_fetch_assoc($res2))
    {
		 $mas2[] = $row2['время выполнения'];
    }
$kolvo2 = count($mas2);
$avg2 = array_sum($mas2)/$kolvo2;
echo $kolvo2;
$line['Среднее время выполнения задания'] = $avg2;

В итоге этих вычислений не срабатывает условие по пользователю и поэтому массив остается пустым

#2 CbCoder

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

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

Отправлено 22 Июль 2014 - 16:32

С чего вы решили, что дело в пользователе? Тестируйте код, за вас это никто делать не будет.

#3 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 22 Июль 2014 - 16:56

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

#4 CbCoder

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

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

Отправлено 22 Июль 2014 - 17:03

Ну так выведите содержимое поля через echo, проверьте что там.

И у вас кстати в одном из запросов AND пропущен между `status`=0 и `f492`. Это должно было sql-ошибку вывести.

#5 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 22 Июль 2014 - 18:22

Цитата

И у вас кстати в одном из запросов AND пропущен между `status`=0 и `f492`. Это должно было sql-ошибку вывести. [/font]]
это опечатка, когда проверки убирал видимо затер тут. буду проверять дальше

#6 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 23 Июль 2014 - 08:04

После проверки увидел очень странную запись: выводится id в формате -id- а если выводить переменную с которой я сравниваю, то выводит просто id и поэтому условие не срабатывает видимо. Вы не сталкивались с таким?

#7 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 23 Июль 2014 - 09:24

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

#8 CbCoder

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

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

Отправлено 23 Июль 2014 - 10:20

Цитата

После проверки увидел очень странную запись: выводится id в формате -id-

Поле с множественным выбором? Тогда так и должно быть. Просто учитывайте это в коде.

#9 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 23 Июль 2014 - 10:24

подскажите пожалуйста как тогда мне сравнивать эти два поля?

$res1 = data_select(47, `status`=0 AND `f492`="-,$user['id']-);
Так?

Сообщение отредактировал aleks.goodcolor: 23 Июль 2014 - 10:24


#10 CbCoder

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

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

Отправлено 23 Июль 2014 - 10:30

Направление верное, но вы сами не видите разве что намешали с синтаксисом? Почему у вас дефисы вылезли за строку?

$res1 = data_select(47, "`status`=0 AND `f492`='-",$user['id'],"-'");

И учтите, что это сработает только если в поле f492 только один пользователь, иначе нужно использовать LIKE

#11 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 23 Июль 2014 - 10:36

То есть если использовать Like то получается:

$res1 = data_select(47, "`status`=0 AND `f492` LIKE '-",$user['id'],"-'");

#12 CbCoder

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

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

Отправлено 23 Июль 2014 - 10:51

Да, только LIKE нужен с процентами, иначе он от равно практически не отличается:

$res1 = data_select(47, "`status`=0 AND `f492` LIKE '%-",$user['id'],"-%'");

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

#13 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 23 Июль 2014 - 12:02

Спасибо за помощь, теперь работает

#14 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 23 Июль 2014 - 12:26

Скажите пожалуйста, а есть ли какая-нибудь особенность вывода поля типа "дата"
Вот код :
f922 - поле типа дата, но оно всегда пустое хотя если выводить через line то показывает.

$res1 = data_select(47, "`status`=0 AND `f492` LIKE '%-",$user['id'],"-%'");
	 while($row1 = sql_fetch_assoc($res1))
	 {	  
		   $mas[] = strtotime($row1['f922']);
	 }

Сообщение отредактировал aleks.goodcolor: 23 Июль 2014 - 12:27


#15 CbCoder

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

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

Отправлено 23 Июль 2014 - 12:45

И где тут вывод? Тут занесение в массив $mas новым элементом очередного значения из поля f922, преобразованного функцией strtotime в формат unixtime (число секунд эпохи юникс).

Если вы где-то потом обнаруживаете там пустое значение, причин может быть миллион, начиная с того что такого поля нет. Тип даты тут непричем абсолютно. Хотя, если преобразовывать strtotime явную недату, то там может и 0 выйти разумеется.

#16 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 23 Июль 2014 - 12:47

суть в том что я убрал из кода проверки
я выводил echo $row1['f922']; - там пусто. Это поле идет в стандартной конфигурации поле "Добавлено" - у него стоит в настройках поля "время добавления записи". Это может как-либо влиять?

Вот полный код:

$ms = array();
$mas = array();
$res1 = data_select(47, "`status`=0 AND `f492` LIKE '%-",$user['id'],"-%'");
	 while($row1 = sql_fetch_assoc($res1))
	 {
	   //echo 'w1='.$row1['f922'].' ';
	   $ms[] = $row1;		
	   $mas[] = strtotime($row1['f922']);
	
	 }
$date1 = min($mas);
//echo 'date='.$date1.' ';
$date2 = date("Y-m-d H:s:i", $date1);
foreach($ms as $val)
{
  if($val['f922'] == $date2)
  {
			  $link = "/view_line2.php?table=47&filter=63&line={$val['f920']}";
			  echo $link;
			  data_update(83, array('f1030'=>$link), "`f1028`='Получить задание'");
			 break;
  }
}

Сообщение отредактировал aleks.goodcolor: 23 Июль 2014 - 13:02


#17 CbCoder

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

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

Отправлено 23 Июль 2014 - 13:02

Цитата

Это поле идет в стандартной конфигурации поле "Добавлено" - у него стоит в настройках поля "время даты добавления". Это может как-либо влиять?

Да, это влияет, только не тип "дата", а то что это поле служебное. У служебных полей внутренние имена не "fXXX", а свои. У времени добавления к примеру имя "add_time".

Т.е., как я и предполагал, причина в том, что поля "f922" у вас нет.

#18 CbCoder

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

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

Отправлено 23 Июль 2014 - 13:05

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

#19 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 23 Июль 2014 - 13:07

то есть его можно использовать как add_time - правильно понимаю?

#20 CbCoder

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

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

Отправлено 23 Июль 2014 - 13:58

Это означает то что вы должны его использовать как add_time в условиях и результатах запроса, и никак иначе.





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

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