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


Фильтр для поля по нескольким значениям

фильтр несколько значений

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

#41 CbCoder

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

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

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

Цитата

...Я вот только не понимаю одного здесь, как в условии выборки полю f3450 будет присвоен выбранный в Заказчике Город и полю f4690 - выбранная в Заказчике услуга? Например f3450 = Барнаул, а f4690 = Ремонт компьютеров.

А я честно говоря не понимаю, что вам тут непонятно. У вас есть некая текущая строка в Заказчике, в которой вы запускаете вычисление, в данное вычисление программой (т.е. автоматически) передается системная переменная-массив $line, в которой программой же прописываются значения полей из этой самой текущей строки. Затем вы их используете в запросе. Что же непонятного то тут? Уже вроде несколько раз повторил что это переменная текущей строки.

#42 CbCoder

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

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

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

Просмотр сообщенияAll_ex74 (07 Июнь 2014 - 16:49) писал:

if ($line['Состояние'] == "Связана")
{
		$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], "AND `f4690`=", $line['Связана по услуге']['ID'], "AND `f3530`='Свободна' AND `f3460`=", $line['ID'], "AND `f6130`=0");
		$isp = $row['f3460']; // тут присваиваем значение переменной

		$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']); // запрет на вторичное размещение - заявка будет размещаться, как вручную оператором, так и внешним запросом...
		if (!$zvka)
		{
				   $zvka['Город'] = $line['Город']['ID'];
				   $zvka['Заказчик'] = $line['ID'];
				   $zvka['Тип услуги'] = $line['Связана по услуге'];
				   $zvka['Исполнитель'] = $isp; // а как тут то быть? как отсортировать с массива нужного исполнителя?
				   $zvka['ID'] = insert_query($zvka, "Заявки");
		}
}



1. Так и не объяснили зачем вам условие `f3460`=", $line['ID'], по моему оно бессмысленно.
2. $zvka['Тип услуги'] = $line['Связана по услуге']; - забыли про ID, это тоже поле связи вроде.
3. По прежнему нет запроса на обновление поля-флаг у выбранной записи с исполнителем.

#43 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

1. Вставил запрос на обновление флага (Флаг=1), но сейчас обновляется поле у всех выбранных строк, а как сделать, чтобы менялся только у первой записи из выбранных запросом?

2. Как правильно назначить переменной $isp значение поля ФИО т. Исполнители, что бы потом скопировать его в поле Исполнитель т. Заявки??

3. И по синтаксису общего запроса на выборку проверьте пож. - я не накосячил? Да и ошибок вроде нет, но всё равно не копируется Исполнитель в Заявку:

if ($line['Состояние'] == "Связана")
{
				$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
				$isp = $row['f3460'];  // у меня не получается назначить переменной значение поля ФИО, где f3460 - поле ФИО т. Исполнители.
				$flag = $row['f6130'];
				data_update(240, array($flag=>1), "`status`=0 and `f6130`='0'"); // запрос на обновление флага добавил, но теперь выводит ошибку, что такого поля нет.

				$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']);
				if (!$zvka)
				{
								   $zvka['Город'] = $line['Город']['ID'];
								   $zvka['Заказчик'] = $line['ID'];
								   $zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
								   $zvka['Исполнитель'] = $isp['ID']; // тут пытаюсь копировать...
								   $zvka['ID'] = insert_query($zvka, "Заявки");
				}
}


Ошибка на работу вычисления:

					
					<br />
					<p class= Сообщение отредактировал All_ex74: 08 Июнь 2014 - 17:44


#44 CbCoder

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

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

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

1а. Чтобы флаг обновлялся в конкретной записи, а не во всех, нужно задать условие, обновляющее нужную запись, т.е. в данном случае запись, возвращенную запросом data_select выше. Оптимальнее всего сделать это, используя id этой записи, т.к. он всегда уникален, т.е. условие должно быть "id=".$row['id']. У вас же сейчас задано условие, обновляющее все активные записи с флагом 0 (`status`=0 and `f6130`='0').
1б. Тут противоречие какое-то: хотя в вопросе 1 вы написали, что у вас обновляется флаг, хоть и во всех записях, сам код запроса прокомментирован тем что выходит ошибка, что немудрено, т.к. у вас косяк в коде: во-первых, зачем-то идет присвоение в переменную $flag = $row['f6130'] значения флага (которое всегда 0, исходя из запроса выше, поэтому сия "переменная" бессмысленна), и затем это значение (а не имя поля, как должно быть), подставляется в сам запрос на место имени обновляемого поля. В итоге, корректный код должен быть таким:
data_update(240, array('f6130'=>1), "id=",$row['id']);

2. Если в поле f3460 лежит ФИО, то и в переменной $isp будет ФИО, поэтому не понял что значит "не получается назначить переменной значение поля ФИО"? Либо вы тогда ошиблись с номером поля, либо переменной значение нормально присваивается (можно проверить отладкой через echo), а проблема у вас сугубо в ее присвоении полю "Исполнитель". Судя по коду, у вас какая-то вольная фантазия пошла, переменная $isp - это не массив, и там нет никаких ID, только текст с ФИО (т.к. вы сами его туда поместили из поля f3460). Если же $zvka['Исполнитель'] - это поле связи, то и присваивать в $isp надо $row['id'], а не $row['f6130'], либо сразу помещать его в $zvka['Исполнитель'], без промежуточных переменных (они только запутывают вас, судя по всему). Т.е. $zvka['Исполнитель'] = $row['id']; а $isp выкидываете вообще.

3. Сам запрос на выборку исполнителя вроде нормальный сейчас. А не копируется по причинам, изложенным выше.

4. Я когда описывал вам этот алгоритм (в примере с Ивановым-Петровым-Сидоровым), вы со мной стали спорить, что все гораздо сложнее у вас... Теперь говорите тоже самое - что когда все исполнители будут заняты, нужно сбросить флаг у всех. Это можно сделать (по условии, что запрос на исполнителя не вернет записей), но сделайте вначале первые 2 пункта (чтобы все работало наконец), потом это обсудим.

#45 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

Какой Вы молодец все таки! Спасибо большое за терпение к таким "специалистам" как я. Сейчас быстренько всё поменяю и продолжу...

#46 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

Я всё исправил:

if ($line['Состояние'] == "Связана")
{
	    $row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
	    data_update(240, array('f6130'=>1), "id=",$row['id']);
	    $zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']);
	    if (!$zvka)
	    {
		    $zvka['Город'] = $line['Город']['ID'];
		    $zvka['Заказчик'] = $line['ID'];
		    $zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
		    $zvka['Исполнитель'] = $row['id'];
		    $zvka['ID'] = insert_query($zvka, "Заявки");
	    }
}



всё заработало, но почему то Флаг=1 проставляется всей выборке:


					
					<br />
					
				</div>
				
<script type= ipb.global.registerReputation( 'rep_post_24249', { domLikeStripId: 'like_post_24249', app: 'forums', type: 'pid', typeid: '24249' }, parseInt('0') );

#47 CbCoder

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

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

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

Запрос на обновление должен быть внутри блока на вставку записи (т.е. внутри проверки на наличие заявки). Иначе обновление у вас будет всегда, тогда как добавление заявки - только если ее еще нет.

if ($line['Состояние'] == "Связана")
{
	$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']);
	if (!$zvka)
	{
		$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // запрос на выборку исполнителя тоже сюда помещаем, для оптимизации кода
		$zvka['Город'] = $line['Город']['ID'];
		$zvka['Заказчик'] = $line['ID'];
		$zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
		$zvka['Исполнитель'] = $row['id'];
		$zvka['ID'] = insert_query($zvka, "Заявки");
		data_update(240, array('f6130'=>1), "id=",$row['id']); // обновление статуса внутри блока, и после реального добавления заявки
	}
}


#48 CbCoder

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

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

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

Пост выше обновлял пару раз, не пропустите нового.

#49 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

Вычисление стоит на событие - изменение поля, сохранение в таблице. Ведь у нас добавляться заявки будут не только диспетчерами, но и внешними запросами - автоматически... Да, спасибо. Я уже увидел изменения и добавил их...

Сообщение отредактировал All_ex74: 09 Июнь 2014 - 15:01


#50 CbCoder

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

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

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

Ну и? заработало как надо?

#51 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

Просмотр сообщенияCbCoder (09 Июнь 2014 - 15:06) писал:

Ну и? заработало как надо?

Да, заработало все отлично. Но один косяк вылез - если в Заявках есть закрытые Заявки, совпадающие по параметрам выборки, то новые не создаются - ведь стоит запрет на повторное добавление... как исправить?

if ($line['Состояние'] == "Связана")
{
		$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']); // тут в условии запроса нужно как то указать, чтобы проверялись только активные..
		if (!$zvka)
		{
				$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
				$zvka['Город'] = $line['Город']['ID'];
				$zvka['Заказчик'] = $line['ID'];
				$zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
				$zvka['Исполнитель'] = $row['id'];
				$zvka['ID'] = insert_query($zvka, "Заявки");
				data_update(240, array('f6130'=>1), "id=",$row['id']);
		}
}

Сообщение отредактировал All_ex74: 09 Июнь 2014 - 15:41


#52 CbCoder

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

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

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

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

#53 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

Просмотр сообщенияCbCoder (09 Июнь 2014 - 15:44) писал:

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

поле Заявка (f5620) бывает в двух состояниях: Исполняемая, Завершённая. вот так исправил, добавив условие...
if ($line['Состояние'] == "Связана")
{
		$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID'], " AND `Статус`='Исполняемая'"); // выводит ошибку синтаксиса.
		if (!$zvka)
		{
				$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
				$zvka['Город'] = $line['Город']['ID'];
				$zvka['Заказчик'] = $line['ID'];
				$zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
				$zvka['Исполнитель'] = $row['id'];
				$zvka['ID'] = insert_query($zvka, "Заявки");
				data_update(240, array('f6130'=>1), "id=",$row['id']);
		}
}


...и пишет ошибку синтаксиса:


					
					<br />
					<p class= Сообщение отредактировал All_ex74: 09 Июнь 2014 - 17:53


#54 CbCoder

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

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

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

Теперь все окей?

#55 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

Просмотр сообщенияCbCoder (09 Июнь 2014 - 17:36) писал:

Теперь все окей?

Один косяк не могу исправить - добавил выше ошибку синтаксиса...

#56 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

Поменял местами в условии - сделал так и все заработало:

$zvka = data_table("Заявки","`status`<>'2' AND `Статус`='Исполняемая' AND `Заказчик`=".$line['ID']);

Спасибо Вам за помощь!..

#57 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

А как сделать обнуление флага, если при выборке Флаг=0 не будет найден?:

if ($line['Состояние'] == "Связана")
{
		$zvka = data_table("Заявки","`status`<>'2' AND `Статус`='Исполняемая' AND `Заказчик`=".$line['ID']);
		if (!$zvka)
		{
				$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID']," AND `f4690`=", $line['Связана по услуге']['ID']," AND `f3530`='Свободна' AND `f6130`='0'");
				$zvka['Город'] = $line['Город']['ID'];
				$zvka['Заказчик'] = $line['ID'];
				$zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
				$zvka['Исполнитель'] = $row['id'];
				$zvka['ID'] = insert_query($zvka, "Заявки");
				data_update(240, array('f6130'=>1), "id=",$row['id']);
		}
}

Сообщение отредактировал All_ex74: 09 Июнь 2014 - 19:03


#58 CbCoder

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

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

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

if ($line['Состояние'] == "Связана")
{
	$zvka = data_table("Заявки","`status`<>'2' AND `Статус`='Исполняемая' AND `Заказчик`=".$line['ID']);
	if (!$zvka)
	{
		$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID']," AND `f4690`=", $line['Связана по услуге']['ID']," AND `f3530`='Свободна' AND `f6130`='0'");
		if (!$row)
		{ // если ни одна запись не найдена
			data_update(240, array('f6130'=>0); // обнуляем флаг во всех записях
			$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID']," AND `f4690`=", $line['Связана по услуге']['ID']," AND `f3530`='Свободна' AND `f6130`='0'"); // повторяем запрос
		}
		$zvka['Город'] = $line['Город']['ID'];
		$zvka['Заказчик'] = $line['ID'];
		$zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
		$zvka['Исполнитель'] = $row['id'];
		$zvka['ID'] = insert_query($zvka, "Заявки");
		data_update(240, array('f6130'=>1), "id=",$row['id']);
	}
}


#59 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

Немного подправил, работает отлично:

if ($line['Состояние'] == "Связана")
{
	    $zvka = data_table("Заявки","`status`<>'2' AND `Статус`='Исполняемая' AND `Заказчик`=".$line['ID']);
	    if (!$zvka)
	    {
			    $row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
			    if (!$row)
			    {
					    data_update(240, array('f6130'=>0), "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID']); // добавил условия в обновление поля...
					    $row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
			    }
			    $zvka['Город'] = $line['Город']['ID'];
			    $zvka['Заказчик'] = $line['ID'];
			    $zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
			    $zvka['Исполнитель'] = $row['id'];
			    $zvka['ID'] = insert_query($zvka, "Заявки");
			    data_update(240, array('f6130'=>1), "id=",$row['id']);
	    }
}


еще раз Вам спасибо огромное!..

#60 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

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

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

if ($line['Состояние'] == "Связана")
{
		$zvka = data_table("Заявки","`status`<>'2' AND `Статус`='Исполняемая' AND `Заказчик`=".$line['ID']);
		if (!$zvka)
		{
			$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
			// если по условиям выборки строки отсутствуют - то заявка скопируется два раза...
				if (!$row)
				{
						data_update(240, array('f6130'=>0), "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID']);
						$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
				}
				$zvka['Город'] = $line['Город']['ID'];
				$zvka['Заказчик'] = $line['ID'];
				$zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
				$zvka['Исполнитель'] = $row['id'];
				$zvka['ID'] = insert_query($zvka, "Заявки");
				data_update(240, array('f6130'=>1), "id=",$row['id']);
		}
}



					
					<br />
					<p class= Сообщение отредактировал All_ex74: 11 Июнь 2014 - 09:13






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

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