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


Объединение строк подтаблицы

подтаблица таблица

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

#1 Аlex Jet

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

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

Отправлено 01 Апрель 2017 - 18:20

Добрый день! Как объединить несколько значений из строк подтаблицы в одном поле таблицы?

Пример, сейчас в поле Описание таблицы Счета объединяются значения полей названий товаров, которые указаны в счете (если товаров несколько, то поле равно Товар 1, Товар 2, Товар 3...).

Нужно чтобы значение поля принимало значения Товар 1 - Цена 1; Товар 2 - Цена 2; Товар 3 - Цена 3.
Белый сервис - сервисный центр, работающий на одной из лучших CRM.

#2 Tony999

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

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

Отправлено 04 Апрель 2017 - 23:01

Надо лишь немного поправить код в вычислении Сохранение счета

 $thatTxt = $row['f1440'];
	}
	if (!in_array($thatTxt, $txt) && $thatTxt) {
		$txt[] = $thatTxt;
	}
}
$line['Описание'] = implode(", ", $txt);

... вот в этой части.
В переменную $thatTxt кроме $row['f1440'] (это поле Описание из подтаблицы Позиции счета) добавить нужные поля из этой же подтаблицы.
В последней строке implode(", " запятая - это разделитель, замените на нужное.

Сообщение отредактировал Tony999: 04 Апрель 2017 - 23:14

КБ - помощь, проекты и решения.
Хостинг. Аренда. Продажа.
ВашаБаза.рф

#3 Аlex Jet

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

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

Отправлено 05 Апрель 2017 - 08:56

Просмотр сообщенияTony999 (04 Апрель 2017 - 23:01) писал:

В переменную $thatTxt кроме $row['f1440'] (это поле Описание из подтаблицы Позиции счета) добавить нужные поля из этой же подтаблицы.
В последней строке implode(", " запятая - это разделитель, замените на нужное.

Сделал новое поле Описание 2, чтобы протестировать. Добавил туда код с самого начала вычисления Сохранение счета, изменив переменные. Получилось следующее:

$result1 = data_select(74, 'f807=', $ID, ' and status=0');
$txt1 = array();
while ($row = sql_fetch_assoc($result1)) {
	$thatTxt1 = "";
	// если есть прайс, название товара
	if ($row['f2331']) {
		$numen1 = data_select_array(91, "status=0 AND id=", $row['f2331']);  //2331 - Прайс-лист из таблицы Позиции счета
		$thatTxt1 = $numen1['f1158'] && " - " && $numen1['f1169'];  //1158 - Наименование товара, 1169 - Цена товара
	}
  
	// нет прайса - описание
	elseif ($row['f1440']) {
		$thatTxt1 = $row['f1440'];
	}
	  
		if (!in_array($thatTxt1, $txt1) && $thatTxt1) {
				$txt1[] = $thatTxt1;
		}
}
$line['Описание 2'] = implode("; ", $txt1);

Строку $thatTxt1 = $numen1['f1158'] && " - " && $numen1['f1169']; вставил не туда, куда указывали, так как тут есть проверка на заполненность поля 1158 (Прайс-лист из таблицы Позиции счета). В Вашем варианте поле Описание 2 заполнялось как раньше, только названием товара, так как поле прайс-лист было заполнено.

Думаю я неправильно указал строку
$thatTxt1 = $numen1['f1158'] && " - " && $numen1['f1169'];
так как сейчас в поле Описание 2 выводится единица.
Белый сервис - сервисный центр, работающий на одной из лучших CRM.

#4 Tony999

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

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

Отправлено 05 Апрель 2017 - 11:03

Конечно, неправильно. Поищите в инете "php конкатенация строк". В Вашем случае, наверное, будет так:
$thatTxt1 = $numen1['f1158']." - ".$numen1['f1169'];

КБ - помощь, проекты и решения.
Хостинг. Аренда. Продажа.
ВашаБаза.рф

#5 Аlex Jet

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

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

Отправлено 07 Апрель 2017 - 11:34

большое спасибо, все получилось!
Белый сервис - сервисный центр, работающий на одной из лучших CRM.

#6 Александр Jet

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

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

Отправлено 21 Март 2018 - 20:09

Не работает похожее вычисление:

У таблицы 111 есть подтаблица Прайс-лист. К каждой записи таблицы 111 прикреплено несколько строк из Прайс-листа.

В поле таблицы 111 нужно вывести объединенные данные из подтаблицы, в формате Наименование 1 - Группа 1; Наименование 2 - Группа 2; и т.д.

Изменил вычисление выше, получилось следующее:
$result2 = data_select(91, 'f7381=', $ID, ' and status=0'); // таблица Прайс-лист 91, поле 7381 является связью с текущей таблицей 111
$txt2 = array();
while ($row = sql_fetch_assoc($result2)) {
		$thatTxt1 = "";
		$numen1 = data_select_array(91, 'f7381=', $ID, ' and status=0');	
		$thatTxt1 = $numen1['f6811']." - ".$numen1['f6501'];  // "Сложить" через тире поля Наименование 6811 и Группа 6501
		}
				
$txt2[] = $thatTxt1;
$line['9011'] = implode("; ", $txt2); // Вывести данные "сложения" через разделитель в поле 9011

Код, который у меня получился выводит значение только для первой строки подтаблицы, Наименование 1 - Цена 1. Дальше почему-то не идет. Пожалуйста. помогите разобраться.

Сообщение отредактировал Александр Jet: 21 Март 2018 - 20:13


#7 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 332 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 22 Март 2018 - 09:08

Просмотр сообщенияАлександр Jet (21 Март 2018 - 20:09) писал:

Не работает похожее вычисление:

У таблицы 111 есть подтаблица Прайс-лист. К каждой записи таблицы 111 прикреплено несколько строк из Прайс-листа.

В поле таблицы 111 нужно вывести объединенные данные из подтаблицы, в формате Наименование 1 - Группа 1; Наименование 2 - Группа 2; и т.д.

Изменил вычисление выше, получилось следующее:
$result2 = data_select(91, 'f7381=', $ID, ' and status=0'); // таблица Прайс-лист 91, поле 7381 является связью с текущей таблицей 111
$txt2 = array();
while ($row = sql_fetch_assoc($result2)) {
		$thatTxt1 = "";
		$numen1 = data_select_array(91, 'f7381=', $ID, ' and status=0');	
		$thatTxt1 = $numen1['f6811']." - ".$numen1['f6501'];  // "Сложить" через тире поля Наименование 6811 и Группа 6501
		}
				
$txt2[] = $thatTxt1;
$line['9011'] = implode("; ", $txt2); // Вывести данные "сложения" через разделитель в поле 9011

Код, который у меня получился выводит значение только для первой строки подтаблицы, Наименование 1 - Цена 1. Дальше почему-то не идет. Пожалуйста. помогите разобраться.
А почему сразу не обратиться к $row?
$thatTxt1 = $row['f6811']." - ".$row['f6501'];
Вы же в него уже положили ассоциированный массив с данными из извлеченной записи.

Творческая группа "ТАВР".

www.MEGATAVR.com Художественная ковка, витражи, мозаика, фрески.

www.iGal.pro Уникальный мангал.


#8 Александр Jet

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

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

Отправлено 24 Март 2018 - 12:56

Убрал лишнее:
$result2 = data_select(91, 'f7381=', $ID, ' and status=0');  // таблица Прайс-лист 91, поле 7381 является связью с текущей таблицей 111
$txt2 = array();
while ($row = sql_fetch_assoc($result2)) {
		$thatTxt1 = "";
		$thatTxt1 = $row['f6811']." - ".$row['f6501'];  // "Сложить" через тире поля Наименование 6811 и Группа 6501
		}
				
$txt2[] = $thatTxt1;
$line['9011'] = implode("; ", $txt2);  // Вывести данные "сложения" через разделитель в поле 9011
Теперь код выводит значение не для первой, а для последней записи в подтаблице

#9 maksn

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

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

Отправлено 30 Март 2018 - 11:21

Просмотр сообщенияАлександр Jet (24 Март 2018 - 12:56) писал:

Убрал лишнее:
$result2 = data_select(91, 'f7381=', $ID, ' and status=0');  // таблица Прайс-лист 91, поле 7381 является связью с текущей таблицей 111
$txt2 = array();
while ($row = sql_fetch_assoc($result2)) {
		$thatTxt1 = "";
		$thatTxt1 = $row['f6811']." - ".$row['f6501'];  // "Сложить" через тире поля Наименование 6811 и Группа 6501
		}
				
$txt2[] = $thatTxt1;
$line['9011'] = implode("; ", $txt2);  // Вывести данные "сложения" через разделитель в поле 9011
Теперь код выводит значение не для первой, а для последней записи в подтаблице
Перенесите заполнение массива $txt2 в цикл
 
$result2 = data_select(91, 'f7381=', $ID, ' and status=0');  // таблица Прайс-лист 91, поле 7381 является связью с текущей таблицей 111
$txt2 = array();
while ($row = sql_fetch_assoc($result2)) {
                $thatTxt1 = "";
                $thatTxt1 = $row['f6811']." - ".$row['f6501'];  // "Сложить" через тире поля Наименование 6811 и Группа 6501
                $txt2[] = $thatTxt1;//Вот СЮДА
                }

//$txt2[] = $thatTxt1; //Перенести ЭТО выше - в цикл WHILE
$line['9011'] = implode("; ", $txt2);  // Вывести данные "сложения" через разделитель в поле 9011

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





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

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