Уникальность группы полей

Все вопросы/проблемы по установке и использовании.
Ответить
vinznsk
Сообщения: 64
Зарегистрирован: 22 мар 2021, 09:52
Имя: Alex
Откуда: New York, US
Организация: Uplevel Solutions
Контактная информация:

Уникальность группы полей

Сообщение vinznsk »

Добрый день, коллеги! Подскажите, можно ли как-нибудь сделать проверку уникальности поля с учетом данных из другого поля?

Например, у меня есть проект и уникальное поле "URL". Мне нужно чтобы поле URL было уникально только для этого проекта, но могло повторяться в другом.

Это сейчас можно сделать?
Аватара пользователя
support
Техническая поддержка
Сообщения: 7661
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Уникальность группы полей

Сообщение support »

Специальных настроек для этого нет. Но можно использовать поле "Ajax запрос"
https://docs.rukovoditel.net.ru/index.php?p=99
и прописать там все необходимые настройки и проверки.
vinznsk
Сообщения: 64
Зарегистрирован: 22 мар 2021, 09:52
Имя: Alex
Откуда: New York, US
Организация: Uplevel Solutions
Контактная информация:

Re: Уникальность группы полей

Сообщение vinznsk »

Такое решение подходит, спасибо!
vinznsk
Сообщения: 64
Зарегистрирован: 22 мар 2021, 09:52
Имя: Alex
Откуда: New York, US
Организация: Uplevel Solutions
Контактная информация:

Re: Уникальность группы полей

Сообщение vinznsk »

Никак не получается реализовать.

Есть структура

- Проекты (связанная сущность "Клиенты" с таблицей "Клиенты")
-- Задачи (дочерняя сущность "клиенты" из таблицы "проекты")
--- Задача ХХ
- Клиенты

Пытаюсь в Задаче ХХ в форме автоматизации проверять наличия URL в рамках проекта.

получилось проверять по всей базе. Но никак не могу сделать проверку в рамках одного проекта.
Просто в таблице сущности "Задачи" поле проекты пустое. Видимо, потому, что это дочерняя сущность. Но в таблице задачи идет связь с таблицей "Клиенты".

Не могу понять как мне подтянуть текущее значение проекта, чтобы потом сравнивать.

Можно ли получить как-то значение поля "Проекты" через ID поля для текущей записи?

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

$project = [242];
- не работает (339 пробовал и как поле "проекты" в текущей сущности, так и в родительской")

То есть простой заход типа:

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

"select field_339 from app_entity_25 where field_339 = '" . $url . "' and field_242 = '" . $project . "';"
не подходит.

upd. думал вывести поле "проект" в форму и потом брать оттуда, но почему-то в автоматизации это поле не подтягивается. Видимо, потому, что это вложенная сущность.
Аватара пользователя
support
Техническая поддержка
Сообщения: 7661
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Уникальность группы полей

Сообщение support »

идентификатор родительской записи хранится в поле parent_item_id
Так как вам нужно перепрыгнуть через сущность, вначале выберите parent_item_id для Задача ХХ - это будет ID задачи
Затем выберите parent_item_id для сущнсоти Задачи.

А в основном запросе нужно будет писать вложенный подзапрос, примерно так:

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

select field_339 from app_entity_25 where field_339 = '" . $url . "'  where parent_item_id in (select id from app_entity_24 where parent_item_id=XX)
app_entity_24 - замените на ID сущности Задачи
XX - это parent_item_id для сущнсоти Задачи которое вы нашли ранее
vinznsk
Сообщения: 64
Зарегистрирован: 22 мар 2021, 09:52
Имя: Alex
Откуда: New York, US
Организация: Uplevel Solutions
Контактная информация:

Re: Уникальность группы полей

Сообщение vinznsk »

Спасибо, Сергей!

По SQL я понимаю логику, запрос будет вот такой в результате:

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

SELECT * FROM `app_entity_25` WHERE `parent_item_id` in (select `id` from `app_entity_26` where `field_262`='5');
где app_entity_26 - это сущность Проекты, а 262 это поле в сущности "проекты" связанная с таблицей "клиенты", где нам нужен 5ый клиент.

Проблема немного в другом. Мне нужно как-то определить через PHP в форме Ajax-поля ID клиента, чтобы я мог потом подставить этот айдишник в SQL-запрос (на место цифры "5").

То есть именно первую часть работы когда находится
идентификатор родительской записи хранится в поле parent_item_id
Так как вам нужно перепрыгнуть через сущность, вначале выберите parent_item_id для Задача ХХ - это будет ID задачи
Затем выберите parent_item_id для сущнсоти Задачи.
я не нашел этого в документации, поэтому не совсем понимаю логику "перешагивания" на родительскую запись.
vinznsk
Сообщения: 64
Зарегистрирован: 22 мар 2021, 09:52
Имя: Alex
Откуда: New York, US
Организация: Uplevel Solutions
Контактная информация:

Re: Уникальность группы полей

Сообщение vinznsk »

Кажется, понял логику более мене. Пытаюсь разобраться с запросом

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

$url = [339]; //Getting Domain Name from "Domain Donor" Field

$project_id = db_query("SELECT field_262 FROM app_entity_26 WHERE id = '" . $_POST['parent_item_id'] . "';"); //getting project ID for that link

$domain_query = db_query("SELECT field_339 FROM app_entity_25 WHERE parent_item_id in (select id from app_entity_26 where field_262 = '" . $project_id . "');",false);

Но как-будто кнопка через автоматизацию не подтягивает данные текущей записи, если этого в форме нет.
Вложения
20210611-082457-095.png
vinznsk
Сообщения: 64
Зарегистрирован: 22 мар 2021, 09:52
Имя: Alex
Откуда: New York, US
Организация: Uplevel Solutions
Контактная информация:

Re: Уникальность группы полей

Сообщение vinznsk »

Почему-то не получается достать parent_item_id, хотя Item_id выдает.
20210611-091133-096.png
20210611-091133-096.png (4.84 КБ) 3008 просмотров

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

$project_id = db_query("SELECT field_262 FROM app_entity_26 WHERE id = '" . $_POST['parent_item_id'] . "';");
Попробовал так:

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

$parent_item_id = db_query("SELECT parent_item_id FROM app_entity_25 WHERE id = " . $_GET['item_id'] . ";");
в результате бесконечная загрузка формы...
Аватара пользователя
support
Техническая поддержка
Сообщения: 7661
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Уникальность группы полей

Сообщение support »

Не корректный код. Должно быть так

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

$item_query = db_query("SELECT parent_item_id FROM app_entity_25 WHERE id = " . $_GET['item_id'] );
$item = db_fetch_array($item_query);
$parent_item_id = $item['parent_item_id'];
1) создаем запрос
2) получаем результат
3) присваиваем значение переменной
vinznsk
Сообщения: 64
Зарегистрирован: 22 мар 2021, 09:52
Имя: Alex
Откуда: New York, US
Организация: Uplevel Solutions
Контактная информация:

Re: Уникальность группы полей

Сообщение vinznsk »

support писал(а): 11 июн 2021, 06:51 Не корректный код. Должно быть так
Спасибо, разобрался

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

$url = [339]; 

//getting parent_item_id
$item_query = db_query("SELECT parent_item_id FROM app_entity_25 WHERE id = " . $_GET['item_id']); 
$item = db_fetch_array($item_query);
$parent_item_id = $item['parent_item_id'];


//getting project ID for the task
$project_query = db_query("SELECT field_262 FROM app_entity_26 WHERE id = '" . $parent_item_id . "';"); 
$project_item = db_fetch_array($project_query);
$project_id = $project_item['field_262'];


//getting url
$domain_query = db_query("SELECT field_339 FROM app_entity_25 WHERE parent_item_id in (select id from app_entity_26 where field_262 = '" . $project_id . "' AND field_339 = '" . $url ."');",false);

if($domain_array = db_fetch_array($domain_query))
{
	echo '<b style="color:red">Domain ' . $url . ' already exist!</b><br />'; 
}
else
{
	echo '<b style="color:green">Domain ' . $url . ' doesn\'t exist!</b><br />';
}
Вот так работает
Ответить