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


Добовление значений из последней записи подчиненной таблицы


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

#1 Love

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
  • Пол:Женщина

Отправлено 06 Сентябрь 2013 - 10:52

Есть две таблицы - основная(Номенклатура) и подчиненная(Прайс) - поле связи Код изделия. В таблице Прайс есть несколько записей, необходимо чтобы в поле Цена прайс основной таблицы (Номенклатура) всегда подставлялось значение из поля Цена прайс последней записи в таблице Прайсы, т.е. если есть несколько цен - берем последнюю.
таблица Прайсы код 321
Кот поля Цена прайс f4201
код поля Код изделия f4181
код поля id f4141

Сделала вычисление в таблице Прайсы - вместо цены в таблицу Номенклатура подставляет ID последней записи в таблице Прайсы
 $result = data_select_field(321, "max(`id`) AS `max_id`", "`status`=0 and `f4181`=",$line['Код изделия']['ID']);
if ($row = sql_fetch_assoc($result))
    $line['Код изделия']['Цена прайс'] = $row['max_id'];
else
    $line['Код изделия']['Цена прайс'] = 0;

а если изменить вычисление так - то не работает

    $result = data_select_field(321, "max(`id`) AS `max_id`", "`status`=0 and `f4181`=",$line['Код изделия']['ID']);
if ($row = sql_fetch_assoc($result))
     $result_1 = data_select_field(321, "`f4201` AS `end_cena`", "`status`=0 and `f4141`=",$row['max_id']);
 if ($row_1 = sql_fetch_assoc($result_1)) 
     $line['Код изделия']['Цена прайс'] = $row_1['end_cena'];
 else
    $line['Код изделия']['Цена прайс'] = 0;
else
    $line['Код изделия']['Цена прайс'] = 0;


#2 Гость_Roman_*

  • Гости

Отправлено 06 Сентябрь 2013 - 13:03

$result = data_select_field(321, "`f4201`", "`status`=0 and `f4181`=",$line['Код изделия']['ID']," ORDER BY `id` DESC LIMIT 0, 1");
if ($row = sql_fetch_assoc($result))
	$line['Код изделия']['Цена прайс'] = $row['f4201'];
else
	$line['Код изделия']['Цена прайс'] = 0;
Обратите внимание на ORDER BY `id` - данная конструкция показывает, что результат выборки запроса сортируется по id, DESC показывает, что сортировка выполняется в обратном порядке, LIMIT 0, 1 - позволяет выбрать только одну запись, остальные не нужны.

#3 Love

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
  • Пол:Женщина

Отправлено 06 Сентябрь 2013 - 13:23

Спасибо за помощь, все работает как надо и главное - оперативно помогли.

#4 Love

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
  • Пол:Женщина

Отправлено 06 Сентябрь 2013 - 14:10

Очень странно, но почему-то включает и удаленные записи в отбор, хотя статус стоит 0 :(

#5 Love

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
  • Пол:Женщина

Отправлено 06 Сентябрь 2013 - 15:02

Просмотр сообщенияLove (06 Сентябрь 2013 - 14:10) писал:

Очень странно, но почему-то включает и удаленные записи в отбор, хотя статус стоит 0 :(
Точнее будет сказать что при удалении последней записи из таблицы Прайсы - поле Цена прайс в таблице Номенклатура не обновляется, хотя в вычислениях указано вычислять при удалении в таблице.

#6 Гость_Roman_*

  • Гости

Отправлено 06 Сентябрь 2013 - 16:40

Дело в том, что на момент срабатывания вычисления при удалении запись ещё не является удалённой. Необходимо создать новое вычисление с событием при удалении, но немного поменять условие запроса, исключив удаляемую запись.
$result = data_select_field(321, "`f4201`", "`id`<>",$ID," and `status`=0 and `f4181`=",$line['Код изделия']['ID']," ORDER BY `id` DESC LIMIT 0, 1");
if ($row = sql_fetch_assoc($result))
  $line['Код изделия']['Цена прайс'] = $row['f4201'];
else
  $line['Код изделия']['Цена прайс'] = 0;


#7 Love

    Новичок

  • Пользователи
  • Pip
  • 5 сообщений
  • Пол:Женщина

Отправлено 09 Сентябрь 2013 - 06:19

Благодарю за все, теперь работает как надо :)

#8 Tony999

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

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

Отправлено 14 Февраль 2014 - 08:47

Отличный код! Но вот подскажите как сразу несколько полей выбрать и присвоить их значения другим полям или переменным?
Спасибо!
Умные сайты на заказ
https://info.crm-master.info





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

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