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