21.11.2018, 15:26 | #1 |
Участник
|
указатели на таблицы и строки в таблице
Добрый день,
Помогите пожалуйста разобраться с одним нюансом в коде. Есть таблица журналов - JournalAzat и таблица строк - JournalStringsAzat. Есть функция которая при добавлении строки пересчитывет суммы полей sum(JournalStringsAzatCount), sum(JournalStringsAzatSum) и заносит их значения в таблицу журналов в соотвествующие поля. Функция выглдит так PHP код:
X++: select JournalIDAzat, sum(JournalStringsAzatCount), sum(JournalStringsAzatSum) from journalStringsAzat group by JournalIDAzat where this.JournalIDAzat == journalStringsAzat.JournalIDAzat; journalStringsAzat.JournalIDAzat - а что тогда это? указатель на что? Заранее спасибо за ответ. |
|
21.11.2018, 15:44 | #2 |
северный Будда
|
Логика-то понятная - вы отбираете все строки, которые относятся к тому же журналу, что и текущая
гораздо интереснее, почему вы делаете select forupdate вне границ транзакции
__________________
С уважением, Вячеслав |
|
|
За это сообщение автора поблагодарили: AzatGDC (1). |
21.11.2018, 15:56 | #3 |
Участник
|
спасибо за ответ. то есть получается что в данном случае
X++: select JournalIDAzat, sum(JournalStringsAzatCount), sum(JournalStringsAzatSum) from journalStringsAzat group by JournalIDAzat where this.JournalIDAzat == journalStringsAzat.JournalIDAzat; за пределами транзакции сделал размышляя что перед обновлением строк я их должен выначале вытащить а потом обновить. это неверно? |
|
21.11.2018, 16:22 | #4 |
Участник
|
X++: select sum(JournalStringsAzatCount), sum(JournalStringsAzatSum) from journalStringsAzat where journalStringsAzat.JournalIDAzat == this.JournalIDAzat; В данном случае из переменной this.JournalIDAzat сначало будет изьято значение, и оно уже передано как константа в условии запроса на сторону SQL. На стороне SQL, в первую очередь будет выборка множества записей на основе условия where. Далее по ним будет суммирование по заданным полям. Результат будет в виде курсора на 1 строку, содержающую просуммированные значения в заданных полях. Возвращать поле JournalIDAzat не имеет особого смысла, так как ого можно также получить из переменной this.JournalIDAzat . P.s. Исходя из вашего логина, постфикс *Azat добавлен как отличительный знак. Это не есть BestPractice, дело конечно ваше. Также таблицу строк обычно называют JournalLines, или JournalDetails. |
|
|
За это сообщение автора поблагодарили: AzatGDC (1). |
21.11.2018, 16:43 | #5 |
Участник
|
спасибо за подробные разъяснения. стало понятнее.
Получается что результатмо запроса будет одна строка? а сгруппированное поле JournalID также войдет в результирующую строку? |
|
21.11.2018, 16:46 | #6 |
Участник
|
Цитата:
Сообщение от Pokersky09
Возвращать поле JournalIDAzat не имеет особого смысла, так как ого можно также получить из переменной this.JournalIDAzat . P.s. Исходя из вашего логина, постфикс *Azat добавлен как отличительный знак. Это не есть BestPractice, дело конечно ваше. Также таблицу строк обычно называют JournalLines, или JournalDetails. |
|
21.11.2018, 21:12 | #7 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: trud (1). |
22.11.2018, 07:39 | #8 |
Участник
|
Разница в том, следовать священному писанию Best Practice или нет.
__________________
// no comments |
|
22.11.2018, 11:11 | #9 |
Участник
|
|
|
22.11.2018, 13:29 | #10 |
Moderator
|
Цитата:
Хотя для таблиц с оптимистической блокировкой, selectForUpdate и вправду синтаксический сахар. Последний раз редактировалось fed; 22.11.2018 в 14:07. |
|
|
За это сообщение автора поблагодарили: AzatGDC (1). |
22.11.2018, 14:48 | #11 |
Участник
|
можно еще пжлст один вопрос? как я понял из написанного выше select все таки возвращает множество записей. ОК. тогда получается следующий код вернет тоже множество записей?
X++: select * from journalAzat where journalAzat.CountOfString > 133; |
|
23.11.2018, 12:28 | #12 |
Участник
|
Я бы вам для понимание таких базовых вопросов посоветовал почитать книгу Еременко по ax 3.0 хотя бы. Там все очень доступно расписано, сэкономите свое время.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|