Извлечение значения по условию из поля со множественным выбором - Пользователи

Все вопросы/проблемы по установке и использовании.
Ответить
Аватара пользователя
alcompstudio
Спонсор
Спонсор
Сообщения: 1519
Зарегистрирован: 03 янв 2016, 20:42
Имя: Александр
Откуда: Мир

Извлечение значения по условию из поля со множественным выбором - Пользователи

Сообщение alcompstudio »

Добрый день!

В продолжение темы viewtopic.php?f=2&t=4689 - появилась необходимость "обратного" действия. Т.е. нужно извлечь из родительской сущности поля Пользователи (со множественным выбором) определенное значение (конкретного Пользователя) - которое мы удаляем/снимаем во вложенной сущности в поле Пользователи со множественным выбором.

Пример:

Заявки (есть Пользователи со множественным выбором 4502)
- Транспортные Средства (ТС) (есть поле Пользователи со множественным выбором 4187).

В 4502, например, есть такой список пользователей (ИД)

Код: Выделить всё

8,9,10,11,12,13
В 4187 - такой

Код: Выделить всё

8,9,10,12
В целом у них нет прямой зависимости по количественному "составу" значений.

Я в форме редактирования в ТС - убираю в поле 4187, например, пользователя с ИД 8. После сохранения должен быть такой результат:

В поле 4502 сущности Заявки

Код: Выделить всё

9,10,11,12,13
В поле 4187 сущности ТС (ну тут все просто и логично)
Т.е. убирая вручную пользователя ИД8 в сущности ТС, его не должно быть и в родительской сущности Заявки.

Как это можно сделать? Есть ли решение через php/mysql ?

В указанном выше топике (действие с добавлением/присоединением множества значений к другому множеству) решение было выполнено при помощи такого кода

Код: Выделить всё

$manager_query = db_query("select field_4198 from app_entity_68 where id='" . [4072] . "'"); //запрос к подключенной сущности в 4198 - Пользователи BTG, 4072 - поле Сущность в текущей сущности.
$current_manager = [4764]; // Берем значение из поля текущей сущности Пользователи BTG
if (empty($current_manager)) {
 
 if($manager = db_fetch_array($manager_query))
    {
      $value1 = $manager['field_4198']; // Берем значение из запроса
 
      if (!empty($value1)) { //Проверяем чтобы поле из подключенной сущности не было пустым
      $current_manager = db_query("update app_entity_122 set field_4764 = '$value1' where id='" . [id] . "'"); //обновляем текущую сущность по полю 4764 Пользователи
      
      ////////////////////   Добавляем (прсоединяем недостающих) пользователей ТК в род.сущность Заявки во множественное поле Пользователи.
     $manager_order_query = db_query("select field_4206 from app_entity_27 where id='" . [4768] . "'"); // запрос к род.сущности Заявки в 4206 - Пользователи, 4768 - ID заявки MySQL формула
      if($manager_order = db_fetch_array($manager_order_query))
    {

      $value22 = $manager_order['field_4206'];
        if (!empty($value22)) { 

            $value2 = implode(',',array_unique(explode(',',($value22 . ',' . $value1))));
            $manager_order_query = db_query("update app_entity_27 set field_4206 = '$value2' where id='" . [4768] . "'");
      }
     else {
       $manager_order_query = db_query("update app_entity_27 set field_4206 = '$value1' where id='" . [4768] . "'");
     }
}
//////////////////////////////// 
        } 
     else return false;
  }
}
else {
      ////////////////////   Добавляем (прсоединяем недостающих) пользователей ТК в род.сущность Заявки во множественное поле Пользователи.
     $manager_order_query = db_query("select field_4206 from app_entity_27 where id='" . [4768] . "'"); // запрос к род.сущности Заявки в 4206 - Пользователи, 4768 - ID заявки MySQL формула
      if($manager_order = db_fetch_array($manager_order_query))
    {

      $value22 = $manager_order['field_4206'];
        if (!empty($value22)) { 

            $value2 = implode(',',array_unique(explode(',',($value22 . ',' . $current_manager))));
            $manager_order_query = db_query("update app_entity_27 set field_4206 = '$value2' where id='" . [4768] . "'");
      }
     else {
       $manager_order_query = db_query("update app_entity_27 set field_4206 = '$current_manager' where id='" . [4768] . "'");
     }
}
//////////////////////////////// 
  return false;
}
Т.е. вот эта часть кода формирует список множества уникальных значений из отдельных "множеств"

Код: Выделить всё

$value2 = implode(',',array_unique(explode(',',($value22 . ',' . $current_manager))));
А вот как теперь убрать отдельное значение по событию во вложенной сущности?

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

Есть ли какие-то варианты? Больше конечно хотелось бы решение на php/mysql :)
Ответить