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


Как обратится к полю в родительской/связанной таблице


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

#41 easysoftware

    Участник

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

Отправлено 22 Май 2015 - 16:33

Здравствуйте!

У меня тоже возник вопрос по суммированию по связанной таблице. Пробовал настроить вот по этому мануалу http://clientbase.ru...ps/calculation/ и по примерам в данной теме, но то не работает, то выдает ошибку.
Если делать по примеру из темы пишет:
Ошибка системы.
Error generated:
C:\Program Files (x86)\MSTL\ClientBase\www\include\functions1.php(484) : data_update()
C:\Program Files (x86)\MSTL\ClientBase\www\include\functions1.php(550) : form_event_recurs()
C:\Program Files (x86)\MSTL\ClientBase\www\view_line2.php(2642) : calc_line()
Ошибка SQL запроса:
UPDATE f_data220 SET Номер прихода='Array' WHERE id=22
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'прихода='Array' WHERE id=22' at line 1

Если делать по примеру из первой ссылки, то показывает сумму только последней внесенной записи или вообще не показывает.
Как все таки правильно настраивать это суммирование?

#42 CbCoder

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

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

Отправлено 22 Май 2015 - 16:53

А где сам ваш код? Каким образом то можно указать, где ошибка, если указать некуда? Выложите код вычисления здесь.

#43 easysoftware

    Участник

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

Отправлено 02 Июнь 2015 - 09:35

Код вычисления такой

$sqlQuery = "SELECT sum(f1680) as summa FROM ".DATA_TABLE."220 WHERE status=0 AND f1620='".$line['Номер прихода']['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$summa = $row['summa'];

$line['Номер прихода']['Сумма'] = $summa ;

#44 CbCoder

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

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

Отправлено 02 Июнь 2015 - 11:15

Судя по ошибке, поля "Номер прихода" не существует в текущей таблице (там где расположено вычисление).

#45 mixei

    Новичок

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

Отправлено 24 Июнь 2015 - 14:10

Просмотр сообщенияeasysoftware (02 Июнь 2015 - 09:35) писал:

Код вычисления такой

$sqlQuery = "SELECT sum(f1680) as summa FROM ".DATA_TABLE."220 WHERE status=0 AND f1620='".$line['Номер прихода']['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$summa = $row['summa'];

$line['Номер прихода']['Сумма'] = $summa ;

Я тоже долго мучился, пока не поменял sql_query на mysql_query и sql_fetch_array на mysql_fetch_array
Ура, заработало!

Админы прошу исправить это в примерах:
http://clientbase.ru...6/calculations/
http://clientbase.ru...ps/calculation/
А то ведь голову сломать можно, думая, что не работает

#46 CbCoder

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

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

Отправлено 24 Июнь 2015 - 14:25

Цитата

Я тоже долго мучился, пока не поменял sql_query на mysql_query и sql_fetch_array на mysql_fetch_array

Вы где использовали то этот пример? В вычислениях или в каком-то своем внешнем скрипте? Данный пример (как и большинство других в документации) сугубо для вычислений или иного кода внутри программы, где использование нативных функций mysql_query и mysql_fetch_array настоятельно не рекомендуется, притом что КБ-функции sql_query и sql_fetch_array должны работать абсолютно нормально.

#47 mixei

    Новичок

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

Отправлено 24 Июнь 2015 - 15:19

Просмотр сообщенияCbCoder (24 Июнь 2015 - 14:25) писал:

Вы где использовали то этот пример? В вычислениях или в каком-то своем внешнем скрипте? Данный пример (как и большинство других в документации) сугубо для вычислений или иного кода внутри программы, где использование нативных функций mysql_query и mysql_fetch_array настоятельно не рекомендуется, притом что КБ-функции sql_query и sql_fetch_array должны работать абсолютно нормально.
Использовал в вычислениях по примеру подсчета общей суммы поля таблицы из суммы полей подтаблицы.
Сейчас попробовал sql_query и sql_fetch_array написать - тоже работает.
А вот если как в примере, где встречается и sql_query и mysql_fetch_assoc - там начинает некорректно считать

Цитата

sqlQ = "SELECT SUM(`f3980`) AS sum FROM ".DATA_TABLE."280 WHERE `f3930`=".$line['Номер']['raw']." and status=0 and `id`<>".$ID;
$pre = sql_query($sqlQ) or die(mysql_error());

$row = mysql_fetch_assoc($pre);
if ($row['sum']===NULL)

{ $line['Номер']['Сумма']=0;

}

else

{

$line['Номер']['Сумма']=$row['sum'];

}


#48 CbCoder

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

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

Отправлено 24 Июнь 2015 - 15:37

Цитата

А вот если как в примере, где встречается и sql_query и mysql_fetch_assoc

Вот насчет этого полностью согласен - мешать эти два разных вида функций нельзя, вместе они могут не работать или работать некорректно. Возможно это были примеры для старых версий 1.х, проверим.

#49 CbCoder

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

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

Отправлено 24 Июнь 2015 - 16:02

Подкорректировал примеры здесь. Если честно, там вообще какие-то немного странные примеры, и логика кода не пояснена, видимо статью писали не программисты.

#50 easysoftware

    Участник

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

Отправлено 09 Июль 2015 - 17:25

Просмотр сообщенияCbCoder (02 Июнь 2015 - 11:15) писал:

Судя по ошибке, поля "Номер прихода" не существует в текущей таблице (там где расположено вычисление).

Поле номер прихода есть в таблице, в которой расположено вычисление https://yadi.sk/i/HI7OaE8ThmTds

С откорректированным кодом по ссылке заработало. Сейчас код такой.

$result = sql_query("SELECT SUM(f1680) AS sum FROM ".DATA_TABLE."220 WHERE f1620=".$line['Номер прихода']['raw']." and status=0 and id!=".$ID);
$row = sql_fetch_assoc($result);
$line['Номер прихода']['Сумма'] = $row['sum'] + $line['Сумма'];

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

Сообщение отредактировал easysoftware: 09 Июль 2015 - 17:33


#51 CbCoder

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

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

Отправлено 10 Июль 2015 - 09:28

По той же ссылке есть же одновременно и пример вычисления на удаление. Код практически такой же, только убираете прибавление $line['Сумма'].

#52 easysoftware

    Участник

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

Отправлено 13 Июль 2015 - 14:57

Подскажите, пожалуйста, еще по такому вычислению, когда таблицы не связаны напрямую, т.е. не таблица и подтаблица, А просто разные таблицы, но в них есть общие данные.
Например, нужно подсчитать общую сумму заказов клиента и отобразить ее в карточке клиента, или количество товара, которое было продано за весь период, и отобразить в карточке товара.
Как такие вычисления делать?

Сообщение отредактировал easysoftware: 13 Июль 2015 - 14:59


#53 CbCoder

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

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

Отправлено 14 Июль 2015 - 09:11

Цитата

А просто разные таблицы, но в них есть общие данные

Что значит "общие данные"? Таблицы бывают либо связаны (через поля связи), либо нет. В этом плане любая связанная таблица абсолютно ничем не отличается от подтаблиц. Соответственно и вычисления для них полностью аналогичны. В вашем примере таблица заказов связана с таблицей клиентов через поле связи с ней, точно также как если бы она была к примеру подтаблицей внутри клиентов.

#54 easysoftware

    Участник

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

Отправлено 16 Июль 2015 - 19:29

Пробую сделать вычисление по аналогии с подтаблицей, не получается.
В случае с подтаблицей, мы прописываем вычисление в подтаблице, в случае если таблицы связаны по полю Название, то в какой таблице прописывать вычисление?
Например, есть таблица Товары (id 10) в ней поле Название (id 50) .Поле Поступило (id 1700) В поле Поступило нам нужно получить кол-во товаров, которые поступили за весь период
Товары мы выбираем в таблице Поступившие товары (Id 220) по полю Название (Id 1630), т.е. по этому полю таблицы связаны. Также есть поле Кол-во (id 1670), по которому и нужно получить сумму

По аналогии с формулой с подтаблицами прописываю так

$result = sql_query("SELECT SUM(f1700) AS sum FROM ".DATA_TABLE."220 WHERE f1670=".$line['Название']['raw']." and status=0 and id!=".$ID);
$row = sql_fetch_assoc($result);
$line['Название']['Поступило'] = $row['sum'] + $line['Поступило'];

Но выдает ошибку


Ошибка в вычислении.


Товары.Пришло :

1: $result = sql_query("SELECT SUM(f1700) AS sum FROM ".DATA_TABLE."220 WHERE f1670=".$line['Название']['raw']." and status=0 and id!=".$ID);
2: $row = sql_fetch_assoc($result);
Ошибка SQL запроса:
SELECT SUM(f1700) AS sum FROM f_data220 WHERE f1670= and status=0 and id!=1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and status=0 and id!=1' at line 1

Как правильно прописать формулу в таком случае?


#55 CbCoder

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

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

Отправлено 20 Июль 2015 - 11:02

Цитата

В случае с подтаблицей, мы прописываем вычисление в подтаблице, в случае если таблицы связаны по полю Название, то в какой таблице прописывать вычисление?

В этом случае аналогом подтаблицы является таблица, в которой находится поле связи. Например, если в Счетах есть поле связи "На кого" с таблицей Контрагенты, то она является как бы "подтаблицей" таблицы Контрагенты (если сделать ее реальной подтаблицей, зайдя в контрагента мы увидим все его счета). Следовательно, если я например хочу получить сумму по всем счетам контрагента, то вычисление должно находится в Счетах и запрос в этом вычислении должен использовать поле связи с контрагентом "На кого". Очевидно, вы что-то сделали не так, например вычисление не в той таблице или в запросе не то поле связи. По крайней мере ошибка связана именно с неверным полем - в $line['Название']['raw'] пустота, хотя ее там быть не должно.

#56 easysoftware

    Участник

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

Отправлено 21 Июль 2015 - 22:21

Пробую сделать по аналогии, все равно выдает ошибку.

Ошибка в вычислении.


Поступившие товары. :

1: $result = sql_query("SELECT SUM(f1670) AS sum FROM ".DATA_TABLE."220 WHERE f1630=".$line['f1630']['raw']." and status=0 and id!=".$ID);
2: $row = sql_fetch_assoc($result);
Ошибка SQL запроса:
SELECT SUM(f1670) AS sum FROM f_data220 WHERE f1630= and status=0 and id!=38
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'and status=0 and id!=38' at line 1


Подскажите, пожалуйста, в чем ошибка. Вроде бы делаю все правильно
Вот таблица, в которой должна быть сумма https://yadi.sk/i/jolOQeQRhztsm
Вот таблица, откуда суммируем https://yadi.sk/i/7NvOxtJVhztmu

Формула такая:

$result = sql_query("SELECT SUM(f1670) AS sum FROM ".DATA_TABLE."220 WHERE f1630=".$line['Название']['raw']." and status=0 and id!=".$ID);
$row = sql_fetch_assoc($result);
$line['Название']['Поступило'] = $row['sum'] + $line['Кол-во'];

Ошибка, насколько я понимаю, здесь f1630=".$line['Название']['raw']." and status=0 and id!=".$ID); или здесь $line['Название']['Поступило'] = $row['sum'] + $line['Кол-во'];
В первом случае Название к какой из таблиц должно относится: к "подтаблице" или к главной? И во втором верно ли поля указаны?

#57 CbCoder

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

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

Отправлено 22 Июль 2015 - 10:17

Да, вроде все совершенно верно, сам не понимаю, почему не работает. Попробуйте заменить ['raw'] на ['ID']. Если все равно ошибка, то замените на intval($line['Название']['ID'])


Цитата

В первом случае Название к какой из таблиц должно относится: к "подтаблице" или к главной?

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

#58 easysoftware

    Участник

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

Отправлено 02 Август 2015 - 01:39

Да, так помогло. Ошибка исчезла. Спасибо! Тем не менее странно, что в одной таблице работает с одной формулой, а в другой не хочет.

Еще вот какая штука возникает. Добавляю в подтаблицу данные - подставляются единицы и двойкии (похоже, что номер записи) хотя настроено, чтобы подставлялись данные из другой таблицы. А после обновления все нормально. И суммой как-то странно. На видео видно, в чем проблема Подскажите, пожалуйста, в чем дело.

#59 easysoftware

    Участник

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

Отправлено 06 Август 2015 - 15:39

Дабы не плодить тем, напишу вопрос здесь:

Неправильно считает сумму при суммировании по связанной таблице. Откуда-то появляется непонятная 1. https://yadi.sk/i/2ExMD3s-iJctH
Есть 2 прихода всего по этому товару в количестве 10 и 50 единиц, а показывает 61

Формула такая:

$result = sql_query("SELECT SUM(f1670) AS sum FROM ".DATA_TABLE."220 WHERE f1630=".$line['Название']['ID']." and status=0 and id!=".$ID);
$row = sql_fetch_assoc($result);
$line['Название']['Поступило'] = $row['sum'] + $line['Кол-во'];

В ней что-то не так?

#60 CbCoder

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

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

Отправлено 23 Август 2015 - 16:03

Просмотр сообщенияeasysoftware (06 Август 2015 - 15:39) писал:

В ней что-то не так?

Да вроде все так. Даже не знаю, что тут может быть. Может все таки не увидели где-то единицу?





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

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