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


Пожалуйста помогите с вычислением


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

#1 Whitescorpion

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

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

Отправлено 29 Ноябрь 2017 - 22:52

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

Вот код:
$sql_creditors = "
SELECT `f6851` as cred_name, `f6841` as cred_adres, `f7081` as cred_indx
FROM ".DATA_TABLE."31
WHERE `f471` = ".intval($line['ID'])."
AND `status` = 0
";
$res_creditors  = sql_query($sql_creditors);
while($row_creditors=sql_fetch_assoc($res_creditors))
{
  $creditors_arr[] = $row_creditors['cred_name']."\r\n".$row_creditors['cred_indx'].", ".$row_creditors['cred_adres'];
}
$need_txt = implode("\r\n",$creditors_arr);//Объединим массив в строку
$line['СписокКредиторов'] = $need_txt; //Обновим поле в основной таблице
unset($creditors_arr);

Делал по примерам с форума. Все работает.
Но нужна Ваша помощь, о боги единицы и нуля!:)
Как из этого массива или уже потом из готового списка убрать дубликаты по полю cred_name.

#2 maksn

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

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 30 Ноябрь 2017 - 01:01

Просмотр сообщенияWhitescorpion (29 Ноябрь 2017 - 22:52) писал:

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

Вот код:
$sql_creditors = "
SELECT `f6851` as cred_name, `f6841` as cred_adres, `f7081` as cred_indx
FROM ".DATA_TABLE."31
WHERE `f471` = ".intval($line['ID'])."
AND `status` = 0
";
$res_creditors  = sql_query($sql_creditors);
while($row_creditors=sql_fetch_assoc($res_creditors))
{
  $creditors_arr[] = $row_creditors['cred_name']."\r\n".$row_creditors['cred_indx'].", ".$row_creditors['cred_adres'];
}
$need_txt = implode("\r\n",$creditors_arr);//Объединим массив в строку
$line['СписокКредиторов'] = $need_txt; //Обновим поле в основной таблице
unset($creditors_arr);

Делал по примерам с форума. Все работает.
Но нужна Ваша помощь, о боги единицы и нуля! :)
Как из этого массива или уже потом из готового списка убрать дубликаты по полю cred_name.
Для этого немного измените запрос. Добавьте DISTINCT(`f6851`) as cred_name
$sql_creditors = "
SELECT DISTINCT(`f6851`) as cred_name, `f6841` as cred_adres, `f7081` as cred_indx
FROM ".DATA_TABLE."31
WHERE `f471` = ".intval($line['ID'])."
AND `status` = 0
";
Это избавит Вас от дублей по cred_name. Но проблема в том, что "Иванов Иван Иванович" проживающий по адресу XXXX, вовсе не является Ивановым Иваном Ивановичем, проживающим по адресу ZZZ. Т.е. нужно отслеживать уникальность совокупности всех полей
Это можно сделать так
$sql_creditors = "
SELECT `f6851` as cred_name, `f6841` as cred_adres, `f7081` as cred_indx
FROM ".DATA_TABLE."31
WHERE `f471` = ".intval($line['ID'])."
AND `status` = 0
";
$res_creditors  = sql_query($sql_creditors);
while($row_creditors=sql_fetch_assoc($res_creditors))
{
  $tmp_val = $row_creditor['cred_name']."\r\n".$row_creditors['cred_indx'].", ".$row_creditors['cred_adres'];
  if(in_array($tmp_val,$creditors_arr))
    continue;
  else
    $creditors_arr[] = $tmp_val;
}
$need_txt = implode("\r\n",$creditors_arr);//Объединим массив в строку
$line['СписокКредиторов'] = $need_txt; //Обновим поле в основной таблице
unset($creditors_arr);

Сообщение отредактировал maksn: 30 Ноябрь 2017 - 01:12

"...Сижу, паяю. CRM починяю..."
Мои разработки

#3 maksbazhin

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

  • Пользователи
  • PipPipPip
  • 62 сообщений
  • Пол:Мужчина

Отправлено 06 Декабрь 2017 - 09:18

Здравствуйте.
Можно ли с помощью этого вычисления заполнить поле список с множественным выбором?
Задача: при изменении поля контрагент должен выйти список контактных лиц, отмечаем нужных и при сохранении с помощью еще одного вычисления формируем необходимые записи в третьей таблице.
собственно поле список данными заполняется, но только после сохранения записи, в режиме редактирования поле не обновляется (нужен JS?) и при повторном открытии записи, с отключенным вычислением, поле список не формируется.

#4 Whitescorpion

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

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

Отправлено 06 Декабрь 2017 - 18:34

Просмотр сообщенияmaksn (30 Ноябрь 2017 - 01:01) писал:

Для этого немного измените запрос. Добавьте DISTINCT(`f6851`) as cred_name
$sql_creditors = "
SELECT DISTINCT(`f6851`) as cred_name, `f6841` as cred_adres, `f7081` as cred_indx
FROM ".DATA_TABLE."31
WHERE `f471` = ".intval($line['ID'])."
AND `status` = 0
";
Это избавит Вас от дублей по cred_name. Но проблема в том, что "Иванов Иван Иванович" проживающий по адресу XXXX, вовсе не является Ивановым Иваном Ивановичем, проживающим по адресу ZZZ. Т.е. нужно отслеживать уникальность совокупности всех полей
Это можно сделать так
$sql_creditors = "
SELECT `f6851` as cred_name, `f6841` as cred_adres, `f7081` as cred_indx
FROM ".DATA_TABLE."31
WHERE `f471` = ".intval($line['ID'])."
AND `status` = 0
";
$res_creditors  = sql_query($sql_creditors);
while($row_creditors=sql_fetch_assoc($res_creditors))
{
  $tmp_val = $row_creditor['cred_name']."\r\n".$row_creditors['cred_indx'].", ".$row_creditors['cred_adres'];
  if(in_array($tmp_val,$creditors_arr))
	continue;
  else
	$creditors_arr[] = $tmp_val;
}
$need_txt = implode("\r\n",$creditors_arr);//Объединим массив в строку
$line['СписокКредиторов'] = $need_txt; //Обновим поле в основной таблице
unset($creditors_arr);

Большое спасибо! Все работает так, как нужно.





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

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