Помогите, пожалуйста, составить SQL запрос (СУБД PerconaSer) :: Прикладное программирование :: Компьютерный форум Ru.Board
Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Помогите, пожалуйста, составить SQL запрос (СУБД PerconaSer)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

IgorKH

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача - выбрать из СУБД (MariaDB) Битрикс24 активные задачи в которые есть уволенные сотрудники в Наблюдателях.
 
Таблица bitrix24.user (нужные столбцы)
bitrix24.user.id DOUBLE
bitrix24.user.name VARCHAR
 
Запрос для выборки уволенных сотрудников
SELECT bitrix24.user.name
FROM bitrix24.user
WHERE bitrix24.user.active = 'N'
ORDER BY bitrix24.user.id
 
дает верную выборку
 
Таблица задач bitrix24.task (нужные столбцы)
bitrix24.task.id BIGINT
bitrix24.task.auditors_ids VARCHAR
bitrix24.task.auditors_names VARCHAR
 
Запрос для выборки задач, которые не завершены
SELECT bitrix24.task.id,
bitrix24.task.auditors_ids,
bitrix24.task.auditors_names
FROM bitrix24.task
WHERE bitrix24.task.status != 'Завершена'
ORDER BY bitrix24.task.id
 
Задач много, поэтому для условия (одна конкретная задача)
WHERE bitrix24.task.status != 'Завершена' AND bitrix24.task.id = 9072
 
Будет выборка (auditors - наблюдатели)
task.id, task.auditors_ids, task.auditors_names
"9072" "71, 430" "Иванов Иван Иванович, Петров Петр Петрович"
 
Т.е. в поле task.auditors_names типом VARCHAR хранится текстом перечень фамилий, кто наблюдатель в данной задаче и их может быть много.
 
Необходимо соединить оба этих запроса, но не понимаю как...
Через LIKE поиск подстроки? Но тогда подзапросом не получится.
Или IN, но нужна подстрока.
 
Что то типа, но это не верно
SELECT bitrix24.task.id,
bitrix24.task.auditors_ids,
bitrix24.task.auditors_names
FROM bitrix24.task
WHERE bitrix24.task.status != 'Завершена' AND bitrix24.task.auditors_names LIKE (SELECT bitrix24.user.name FROM bitrix24.user WHERE bitrix24.user.active = 'N')

Всего записей: 11 | Зарегистр. 10-02-2003 | Отправлено: 16:58 08-12-2024 | Исправлено: IgorKH, 20:13 16-12-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IgorKH
ну есть же темы - SQL запросы Interbase/Firebird, MSSQL, MySQL и т.д. [?]
SQL запрос [?]
 
 
SELECT bitrix24.task.id,
bitrix24.task.auditors_ids,
bitrix24.task.auditors_names
FROM bitrix24.task
JOIN bitrix24.user ON FIND_IN_SET(bitrix24.user.id, bitrix24.task.auditors_ids) > 0
WHERE bitrix24.task.status != 'Завершена' AND bitrix24.user.active = 'N'
 
единственное, что в сете через запятую без пробела должно быть, с пробелом может неправильно будет. в принципе, можно его на лету удалить, но неэффективно будет.
 
если что, FIND_IN_SET(bitrix24.user.id, REPLACE(bitrix24.task.auditors_ids, ' ', '')) > 0

Всего записей: 16176 | Зарегистр. 20-09-2014 | Отправлено: 20:58 09-12-2024 | Исправлено: Mavrikii, 21:09 09-12-2024
IgorKH

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу прощения, ввел в заблуждение...
На запрос
SELECT bitrix24.task.id, bitrix24.task.auditors_ids, bitrix24.task.auditors_names
FROM bitrix24.task
JOIN bitrix24.user ON FIND_IN_SET(bitrix24.user.name, bitrix24.task.auditors_names) > 0
WHERE bitrix24.task.status != 'Завершена' AND bitrix24.user.active = 'N'
 
SQLLAB мне выдал ошибку
 
Trino Ошибка
trino error: TrinoUserError(type=USER_ERROR, name=FUNCTION_NOT_FOUND, message="line 5:23: Function 'find_in_set' not registered", query_id=20241216_165744_63124_yas6m)
Возможные причины:
Issue 1002 - The database returned an unexpected error.
 
Т.е. в данном диалекте SQL функции find_in_set нет.
А в документации есть.
Начал изучать, на каком SQL все-таки работает Битрикс24, т.к. на данной виртуалке есть следы MySQL, InnoDB, MariaDB.
Задал вопрос в ТП Битрикс24. Почти через сутки они мне ответили:
В BitrixVM 9.0.3 по умолчанию используется MySQL 8.0.39-30 Percona Server.
 
Теперь вопрос к сообществу, помогите, пожалуйста, написать SQL запрос для вышеприведенных данных применительно к SQL Percona Server.

Всего записей: 11 | Зарегистр. 10-02-2003 | Отправлено: 20:11 16-12-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IgorKH

Цитата:
по умолчанию используется MySQL 8.0.39-30 Percona Server.

это лишь иначе настроенный MySQL
данная функция существует еще с 4 версии.
и в Percona она тоже есть.
 
судя по сообщению, у вас и не Percona, а https://prestodb.io/
аналогом может являться
https://trino.io/docs/current/functions/array.html#contains
непонятно, каким боком это относится к Bitrix

Всего записей: 16176 | Зарегистр. 20-09-2014 | Отправлено: 22:37 16-12-2024 | Исправлено: Mavrikii, 22:40 16-12-2024
IgorKH

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для Mavrikii
 

Всего записей: 11 | Зарегистр. 10-02-2003 | Отправлено: 11:10 21-12-2024
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IgorKH
повторюсь..  
да, Bitrix использует то, что написано там.
но ваш SQLLAB работает с Trino, а не MySQL/Percona/MariaDB подобным сервером.
я не знаю куда и как вы подключаетесь.
 
видно же из ошибки

Цитата:
Trino Ошибка
trino error: TrinoUserError

что он работает не с перечисленными серверами, а с Trino.
разбирайтесь как заставить SQL Lab (раз пользуетесь им) работать с MySQL сервером.
 
по сути Trino это прокладка, что умеет работать с разными SQL серверами. для чего она в данном ситуации - сложно представить.
либо работайте напрямую с MySQL от Битрикса, либо заставьте Trino передавать MySQL запросы именно MySQL серверу.
 
https://www.starburst.io/blog/what-is-trino/

Цитата:
Стоит углубиться в то, что именно делает механизм запросов механизмом запросов. Без сомнения, одно из самых больших заблуждений о механизме запросов — думать о нем как о базе данных . Trino , как и другие механизмы запросов, не хранит данные . Вместо этого, чтобы использовать Trino , вам нужен базовый источник данных . Как только у вас это есть, Trino  подключается к источнику данных и использует его для выполнения запросов. Важно то, что он делает это с помощью архитектуры на основе коннектора . Архитектура состоит из основного механизма запросов вместе с возможностью подключения этого механизма к широкому спектру источников данных .
 
Trino лучше всего работает с озерами данных и озерными домами на основе Apache Iceberg , Delta Lake, Hudi или Hive. Поскольку Trino  включает в себя десятки других коннекторов , его также можно использовать для федерации запросов . Федеративные запросы используют данные, хранящиеся в нескольких системах и базах данных. Trino может подключаться и запрашивать их все одновременно. Этот подход использует объединения для объединения разрозненных данных с помощью одного SQL-запроса.

 
чтобы заменить функцию find_in_set придется парсить строку "71, 430" и искать в ней значения id.
можно заменить на  
JOIN bitrix24.user ON CONCAT(', ', bitrix24.task.auditors_ids, ',') LIKE CONCAT('%, ', bitrix24.user.id, ',%')
 
но это медленно все будет

Всего записей: 16176 | Зарегистр. 20-09-2014 | Отправлено: 00:32 22-12-2024 | Исправлено: Mavrikii, 01:40 22-12-2024
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Помогите, пожалуйста, составить SQL запрос (СУБД PerconaSer)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru