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


Действия в выделенными записями

дололнительные действия

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

#1 Tony999

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

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

Отправлено 08 Апрель 2014 - 07:10

Есть 2 таблицы: Данные и Связи.
В таблице Данные в режиме таблицы выделяю "галочками" несколько нужных записей.
Никуда не переходя, через Дополнительно (или как-то еще?) запускаю вычисление (скрипт?), которое сделает следующее:
создаст новую запись в таблице Связи и ее ID поместит в одно из полей всех ранее выделенных записей таблицы Данные.

Как это сделать? Если через Дополнительные действия, то ведь вычисление (скрипт) будет выполнен столько раз, сколько записей я выделил в таблице Данные и создаст несколько записей в таблице Связи, хотя нужна только одна,

Использовать глобальную переменную, как флаг, чтобы в таблице Связи создавалась только одна запись? Как потом ее сбрасывать?

Может, я чего-то не так понимаю и есть изящное решение этого вопроса?

Спасибо!
Умные сайты на заказ
https://info.crm-master.info

#2 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

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

Отправлено 08 Апрель 2014 - 07:53

Просмотр сообщенияTony999 (08 Апрель 2014 - 07:10) писал:

Использовать глобальную переменную, как флаг, чтобы в таблице Связи создавалась только одна запись? Как потом ее сбрасывать?
Зачем ее сбрасывать? После выполнения дополнительного действия, окно перегрузится, глобальная обнулится.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#3 Tony999

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

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

Отправлено 08 Апрель 2014 - 09:05

Что-то я запутался.... Все равно не понятно как сделать чтобы в таблице Связи создавалась только одна запись, а не столько, сколько я выбрал строк в таблице Данные....
Умные сайты на заказ
https://info.crm-master.info

#4 CbCoder

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

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

Отправлено 08 Апрель 2014 - 09:10

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

#5 Tony999

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

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

Отправлено 08 Апрель 2014 - 09:25

А при втором и следующих проходах доп. действий я должен искать эту самую запись в таблице Cвязи через ID max?

Сообщение отредактировал Tony999: 08 Апрель 2014 - 09:27

Умные сайты на заказ
https://info.crm-master.info

#6 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

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

Отправлено 08 Апрель 2014 - 11:16

Просмотр сообщенияTony999 (08 Апрель 2014 - 09:25) писал:

А при втором и следующих проходах доп. действий я должен искать эту самую запись в таблице Cвязи через ID max?
Все проще.
global $sv_ID;
$new_data=array();
$new_data['status'] = '0'; //раньше был баг при добавлении новой записи, статус неправильно вносился
$new_data['user_id'] = $user['id']; // текущий пользователь
if (!$sv_ID) $sv_ID = data_insert('XXX',EVENTS_ENABLE,$new_data); // ХХХ - номер таблицы Связи
// здесь выполняете любые действия
$line['Связи'] = $sv_ID;
....
Суть в том, что строка с добавлением новой записи в таблицу отработает только один раз и в глобальную переменную $sv_ID будет занесен ID созданной записи.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#7 CbCoder

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

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

Отправлено 08 Апрель 2014 - 11:45

Все верно, только заполнение служебных полей сейчас излишне, тем более при включенном EVENTS_ENABLE.

Правильнее:

global $sv_ID;
if (!$sv_ID)
{ // переменная пока пуста, значит добавляем новую запись
  $new_data = array();
  $new_data['f111'] = ... ; // заполняете нужные поля для новой записи в таблице Связи
  ......
  // добавляем запись и помещаем id новой записи в нашу переменную
  $sv_ID = data_insert(222, EVENTS_ENABLE, $new_data); // 222 - id таблицы Связи
}
$line['Поле связи с таблицей "Связи"'] = $sv_ID;
....


#8 Tony999

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

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

Отправлено 09 Апрель 2014 - 07:21

Спасибо большое за помощь. А подскажите, как можно после окончания отработки этого кода (т.е. после групповых дополнительных действий) сразу же перейти к другой процедуре (коду) который будет, например, производить необходимые вычисления в этих, теперь уже связанных через таблицу Связи, записях таблицы Данные?
Или есть какой-либо флаг, чтобы продолжить существующий код после выполнения доп. действий? Ведь программа заранее знает сколько строк в таблице я выбрал "галочками"
Я понятно объясняю?
Спасибо!.
Умные сайты на заказ
https://info.crm-master.info

#9 CbCoder

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

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

Отправлено 09 Апрель 2014 - 09:50

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

global $sv_ID;
if (!$sv_ID)
{
  $new_data = array();
  $new_data['f111'] = ... ;
  ......
  $sv_ID = data_insert(222, EVENTS_ENABLE, $new_data); // 222 - id таблицы Связи
}
$line['Поле связи с таблицей "Связи"'] = $sv_ID;
....
// тут добавляете доп.код для каждой записи после создания связи


#10 Tony999

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

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

Отправлено 09 Апрель 2014 - 10:14

Мне не нужно для каждой записи, мне нужно для всех сразу!
Этот код ведь выполнится столько раз, сколько "галочек" я поставил в таблице Данные перед доп. действием. А мне это не нужно, я хочу делать взаимозависимые вычисления над всем массивом выделенных записей таблицы Данные. Таблица Связи мне нужна лишь как связь (как нумерованный флаг), чтобы знать над какими записями таблицы Данные были выполнены вычисления.

Сообщение отредактировал Tony999: 09 Апрель 2014 - 10:28

Умные сайты на заказ
https://info.crm-master.info

#11 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

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

Отправлено 09 Апрель 2014 - 10:33

Просмотр сообщенияTony999 (09 Апрель 2014 - 10:14) писал:

Мне не нужно для каждой записи, мне нужно для всех сразу!
Этот код ведь выполнится столько раз, сколько "галочек" я поставил в таблице Данные перед доп. действием. А мне это не нужно, я хочу делать взаимозависимые вычисления над всем массивом выделенных записей таблицы Данные. Таблица Связи мне нужна лишь как связь (как нумерованный флаг), чтобы знать над какими записями таблицы Данные были выполнены вычисления.
Если Вы собираетесь делать вычисления над всем массивом - это означает над каждым его элементом, чем тогда не устраивает вариант, предложенный CbCoder? Можете привести пример действия?

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#12 Tony999

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

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

Отправлено 09 Апрель 2014 - 11:04

Например я хочу сумму (накопить ее я знаю как) определенных полей всех выбранных записей в таблице Данные записать совсем в другую таблицу. Это нужно сделать только один раз. А если я отметил "галочками" 3 записи, тогда и это действие будет выполнено 3 раза (ведь доп. действие будет работать 3 раза, по 1 разу для каждой записи).
Ок, глобальная переменная, как счетчик, массив по ее индексу... и все 3 записи (или сколько там проходов будет) - все у меня!
Но как я узнаю, что выбранные записи "кончились", что их было именно 3, что мне теперь можно делать вычисления над моим массивом и результат этих вычислений разнести по полям той же таблицы Данные или другой таблицы, с которой имеется связь.,
Умные сайты на заказ
https://info.crm-master.info

#13 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

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

Отправлено 09 Апрель 2014 - 14:27

Просмотр сообщенияTony999 (09 Апрель 2014 - 11:04) писал:

Но как я узнаю, что выбранные записи "кончились", что их было именно 3, что мне теперь можно делать вычисления над моим массивом и результат этих вычислений разнести по полям той же таблицы Данные или другой таблицы, с которой имеется связь.,
Не уверен, что есть переменная, в которой лежит число отобранных записей. В любом случае если и есть - это javascript переменная. И как увязать ее с пхп вычислениями не совсем понятно. Проще в глобальную переменную суммировать значения из полей и вносить через update ее значение в поле нужной таблицы при отработке каждого вычисления. Конечно трафик возрастет и с точки зрения оптимальности не самое изящное решение, но рабочее. В итоге при выполнении вычисления в последней выбранной записи в требуемом поле окажется необходимое значение.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#14 CbCoder

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

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

Отправлено 09 Апрель 2014 - 14:40

Цитата

Не уверен, что есть переменная, в которой лежит число отобранных записей

Есть массив $_SESSION[$ses_id]["sel111"], где 111 - id таблицы. Число элементов и есть число выделенных записей.

#15 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

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

Отправлено 09 Апрель 2014 - 15:49

Просмотр сообщенияCbCoder (09 Апрель 2014 - 14:40) писал:

Есть массив $_SESSION[$ses_id]["sel111"], где 111 - id таблицы. Число элементов и есть число выделенных записей.
Сколько, однако, у вас всего есть... В документации все точно не описать, но хотелось бы. Понадобиться когда-нибудь - устанешь искать по форуму.

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#16 Tony999

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

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

Отправлено 09 Апрель 2014 - 18:21

Вот это дело! Всем большое спасибо!!!
Кстати, а номера (ID) выделенных записей тоже ведь должны где-то храниться?

Сообщение отредактировал Tony999: 12 Апрель 2014 - 10:49

Умные сайты на заказ
https://info.crm-master.info

#17 Tony999

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

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

Отправлено 12 Апрель 2014 - 10:55

Просмотр сообщенияTony999 (09 Апрель 2014 - 18:21) писал:

Вот это дело! Всем большое спасибо!!!
Кстати, а номера (ID) выделенных записей тоже ведь должны где-то храниться?

Хочется уж закончить эту тему.
Умные сайты на заказ
https://info.crm-master.info

#18 CbCoder

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

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

Отправлено 12 Апрель 2014 - 14:33

Цитата

Кстати, а номера (ID) выделенных записей тоже ведь должны где-то храниться?

В этом же массиве и хранятся как раз.

#19 Tony999

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

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

Отправлено 13 Апрель 2014 - 00:26

Чего-то я из этого массива ничего не могу получить, ни кол-ва, ни номеров выделенные записей... Переменная $ses_id равна 0 при выделенных записях.
Умные сайты на заказ
https://info.crm-master.info

#20 CbCoder

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

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

Отправлено 14 Апрель 2014 - 09:36

$ses_id нужно объявить как глобальную в коде вычисления.





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

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