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


Заполнение поля данными из поля последней строки в подтаблице


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

#1 user103

    Участник

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

Отправлено 29 Март 2016 - 13:48

Есть таблица сотрудники, поле оклад
Подтаблица история окладов
В поле оклад нужно выводить сумму из последней строки в подтаблице
использую следующее вычисление:

$result = data_select_field(1040, "`f15930`", "`id`<>",$ID," and `status`=0 and `f16170`=",$line['Сотрудник']['ID']," ORDER BY `id` DESC LIMIT 0, 1");
if ($row = sql_fetch_assoc($result))
$line['Сотрудник']['Оклад тест'] = $row['f15930'];
else
$line['Сотрудник']['Оклад тест'] = 0;

Работает некорректно - подставляет данные из предпоследней строки, в чем может быть ошибка?

#2 Александр Пономарев

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

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

Отправлено 29 Март 2016 - 14:08

Попробуйте просто LIMIT 1 написать, а не LIMIT 0,1 как у вас и я не совсем понял смысл, который вы придаете условию "`id`<>",$ID,"
Если у вас в истории храниться и текущий вариант до его сохранения и вы хотите его не включать в выборку, тогда это надо сделать иначе.
И еще. Я бы делал не ORDER BY `id` по ID, который по логике должен нарастать по мере формирования истории, а по дате создания. Тогда можно будет вставлять в историю записи "задним числом". Подозреваю, что в вашем случае именно из-за того, что нарушен порядок следования id у вас и выводится предпоследняя, а не последняя запись. Запустите скрипт edit_sql.php и посмотрите на id записей

#3 CbCoder

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

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

Отправлено 29 Март 2016 - 15:18

Цитата

в чем может быть ошибка

Ошибка в условии `id`<>",$ID," - ему тут не место. В случае возникновения события в последней строке, естественно что она не учлась, т.к. вы сами же ее этим условием выкинули из запроса.

#4 user103

    Участник

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

Отправлено 30 Март 2016 - 10:58

Если условие удалить, выдает ошибку, возможно какое то другое условие должно быть?

#5 CbCoder

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

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

Отправлено 30 Март 2016 - 11:03

А связку "and" между условиями вы случайно удалить не забыли?

#6 user103

    Участник

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

Отправлено 30 Март 2016 - 11:25

нет, не забыл
код получается такой
не отрабатывает
$result = data_select_field(1040, "`f15930`", `status`=0 and `f16170`=",$line['Сотрудник']['ID']," ORDER BY `id` DESC LIMIT 0, 1");
if ($row = sql_fetch_assoc($result))
  $line['Сотрудник']['Оклад тест'] = $row['f15930'];
  else
  $line['Сотрудник']['Оклад тест'] = 0;


#7 CbCoder

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

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

Отправлено 30 Март 2016 - 11:31

Ошибка видна невооруженным глазом уже в вашем сообщении, когда вы код в окно с подсветкой вставили - отсутствует открывающая кавычка (видимо удалили "за компанию"). Сравните визуально:

$result = data_select_field(1040, "`f15930`", "`status`=0 and `f16170`=",$line['Сотрудник']['ID']," ORDER BY `id` DESC LIMIT 0, 1");
if ($row = sql_fetch_assoc($result))
  $line['Сотрудник']['Оклад тест'] = $row['f15930'];
  else
  $line['Сотрудник']['Оклад тест'] = 0;






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

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