Есть таблица сотрудники, поле оклад
Подтаблица история окладов
В поле оклад нужно выводить сумму из последней строки в подтаблице
использую следующее вычисление:
$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;
Работает некорректно - подставляет данные из предпоследней строки, в чем может быть ошибка?
0
Заполнение поля данными из поля последней строки в подтаблице
Автор user103, 29 марта 2016 13:48
Сообщений в теме: 6
#1
Отправлено 29 Март 2016 - 13:48
#2
Отправлено 29 Март 2016 - 14:08
Попробуйте просто LIMIT 1 написать, а не LIMIT 0,1 как у вас и я не совсем понял смысл, который вы придаете условию "`id`<>",$ID,"
Если у вас в истории храниться и текущий вариант до его сохранения и вы хотите его не включать в выборку, тогда это надо сделать иначе.
И еще. Я бы делал не ORDER BY `id` по ID, который по логике должен нарастать по мере формирования истории, а по дате создания. Тогда можно будет вставлять в историю записи "задним числом". Подозреваю, что в вашем случае именно из-за того, что нарушен порядок следования id у вас и выводится предпоследняя, а не последняя запись. Запустите скрипт edit_sql.php и посмотрите на id записей
Если у вас в истории храниться и текущий вариант до его сохранения и вы хотите его не включать в выборку, тогда это надо сделать иначе.
И еще. Я бы делал не ORDER BY `id` по ID, который по логике должен нарастать по мере формирования истории, а по дате создания. Тогда можно будет вставлять в историю записи "задним числом". Подозреваю, что в вашем случае именно из-за того, что нарушен порядок следования id у вас и выводится предпоследняя, а не последняя запись. Запустите скрипт edit_sql.php и посмотрите на id записей
#3
Отправлено 29 Март 2016 - 15:18
Цитата
в чем может быть ошибка
Ошибка в условии `id`<>",$ID," - ему тут не место. В случае возникновения события в последней строке, естественно что она не учлась, т.к. вы сами же ее этим условием выкинули из запроса.
#4
Отправлено 30 Март 2016 - 10:58
Если условие удалить, выдает ошибку, возможно какое то другое условие должно быть?
#5
Отправлено 30 Март 2016 - 11:03
А связку "and" между условиями вы случайно удалить не забыли?
#6
Отправлено 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
Отправлено 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;
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных