Добавление/сравнение значений множественных полей (пользователи)

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

Добавление/сравнение значений множественных полей (пользователи)

Сообщение alcompstudio »

Добрый день!

Поднимал как-то тему viewtopic.php?p=19031#p19031 . Там нужно было добавлять в поле Пользователи со множественным выбором/флажками - нового пользователя из другой сущности. Т.е. не перезаписывать, а именно добавлять новое значение к уже имеющимся. Решено было через PHP поле.

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

В данном случае нужно из одного множественного поля передать значения в другое множественное (добавить). При этом нужно добавить именно недостающие значения, т.к. в поле откуда берем значения могут быть уже данные, которые уже есть в поле, куда копируем.

Простыми словами, если взять "выборку" поля Донор (откуда копируем) из БД, то там например, будут такие ID значений:

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

10,11,12,13
А в поле Приемка уже имеются такие значения:

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

8,9,10,12
То в итоге нужно получить такое значение в поле Приемка:

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

8,9,10,11,12,13
, т.е. значения "10" и "12" не должны зайти/продублироваться в это поле, т.к. они там уже есть.

Как это можно реализовать? Может есть функция в php или mysql, которые удаляют дубли таких значений, или может как-то вычислять их по запятым... Вот ломаю голову как можно сделать? Может будут идеи у кого-то?
nruslan2
Сообщения: 2435
Зарегистрирован: 14 окт 2020, 09:13
Имя: Ruslan
Откуда: Moscow

Re: Добавление/сравнение значений множественных полей (пользователи)

Сообщение nruslan2 »

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

Re: Добавление/сравнение значений множественных полей (пользователи)

Сообщение alcompstudio »

nruslan2 писал(а): 08 сен 2021, 20:09 я делал так:
1. склеиваем все
2. превращаем в массив
3. удаляем дубли в массиве
4. превращаем обратно в строку
ну я так и предполагал делать, только знаний не хватает как это волшебство организовать :)
Аватара пользователя
Develop-Soft
Сообщения: 599
Зарегистрирован: 27 мар 2019, 01:22
Имя: Владимир
Откуда: Россия, Белгород
Контактная информация:

Re: Добавление/сравнение значений множественных полей (пользователи)

Сообщение Develop-Soft »

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

function merge_s($str_arr1,$str_arr2)
{
  $arr = json_decode('[' . $str_arr1 .','. $str_arr2 .']', true);
  sort($arr);
  $unique = array_unique($arr); 
  return substr(json_encode(array_values($unique)), 1, -1);
};
Аватара пользователя
alcompstudio
Спонсор
Спонсор
Сообщения: 1519
Зарегистрирован: 03 янв 2016, 20:42
Имя: Александр
Откуда: Мир

Re: Добавление/сравнение значений множественных полей (пользователи)

Сообщение alcompstudio »

Develop-Soft писал(а): 09 сен 2021, 10:05

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

function merge_s($str_arr1,$str_arr2)
{
  $arr = json_decode('[' . $str_arr1 .','. $str_arr2 .']', true);
  sort($arr);
  $unique = array_unique($arr); 
  return substr(json_encode(array_values($unique)), 1, -1);
};
Владимир, спасибо большое, теперь у меня будет еще головная боль, что вы тут написали и как это применить, т.к. в программировании не силен :D Шутка, но разбираться придется))
Аватара пользователя
Develop-Soft
Сообщения: 599
Зарегистрирован: 27 мар 2019, 01:22
Имя: Владимир
Откуда: Россия, Белгород
Контактная информация:

Re: Добавление/сравнение значений множественных полей (пользователи)

Сообщение Develop-Soft »

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

$s1 = '1, 2, 3, 5, 10';
$s2 = '4, 8, 6, 2, 5';

print_r(merge_s($s1,$s2)); // 1,2,3,4,5,6,8,10
nruslan2
Сообщения: 2435
Зарегистрирован: 14 окт 2020, 09:13
Имя: Ruslan
Откуда: Moscow

Re: Добавление/сравнение значений множественных полей (пользователи)

Сообщение nruslan2 »

тока уточните еще что это JS, а не PHP!

так как все-таки в системе используются использовать JS/PHP/SQL
Аватара пользователя
Develop-Soft
Сообщения: 599
Зарегистрирован: 27 мар 2019, 01:22
Имя: Владимир
Откуда: Россия, Белгород
Контактная информация:

Re: Добавление/сравнение значений множественных полей (пользователи)

Сообщение Develop-Soft »

nruslan2 писал(а): 09 сен 2021, 14:58 тока уточните еще что это JS, а не PHP!

так как все-таки в системе используются использовать JS/PHP/SQL

Уточняю: это php, а не js.

js будет примерно таким:

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

function merge_s(str_arr1,str_arr2)
{
  let arr = JSON.parse('['+str_arr1 +','+str_arr2 +']'); 
  arr.sort(function(a, b) {
  return a - b;
});
  let arr_res = [];
  for (let s of arr) {
    if (!arr_res.includes(s)) {
      arr_res.push(s);
    }
  }
  let s = JSON.stringify(arr_res);
  return s.substr(1,s.length-2);
};

var s1 = '1, 2, 3, 5, 10';
var s2 = '4, 8, 6, 2, 5';

merge_s(s1,s2); // 1,2,3,4,5,6,8,10
nruslan2
Сообщения: 2435
Зарегистрирован: 14 окт 2020, 09:13
Имя: Ruslan
Откуда: Moscow

Re: Добавление/сравнение значений множественных полей (пользователи)

Сообщение nruslan2 »

тьфу точно) ссори
Ответить