Страница 1 из 1

Помогите написать SQL запрос

Добавлено: 15 окт 2020, 10:34
nruslan2
Имеем:
1. Сущность Пользователи.
2. Глобальные списки

В глобальный список добавил список отделы - и в каждое значение отдела назначил пользователя.
И теперь хотелось бы чтобы в Сущности Пользователя автоматически отображались данные из Глобального списка, в данном случаи отображались Отделы. При чем в разные отделы может входить один и тот же пользователь.
Для этого в поле сущность Пользователи добавил поле тип MySQL Формула.
Но вот как написать запрос чтобы работало не выходит(
Написал вот такую конструкцию:
SELECT app_global_lists_choices.name FROM app_global_lists_choices WHERE app_global_lists_choices.users = e.id
Но вылезает ошибка что найдено более 1й записи - что соответствует действительности так как пользователь находится в двух записях Отделы.
Помогите пожалуйста написать правильный запрос. который выводил бы в столбик все Отделы в которых нашелся пользовтаель!

Спасибо.

Re: Помогите написать SQL запрос

Добавлено: 15 окт 2020, 10:59
support

Re: Помогите написать SQL запрос

Добавлено: 15 окт 2020, 12:34
nruslan2
Спасибо - но нашел еще проблему, так как: через count проверял было 0. а должно было дать 2
Постепенно понял в чем ошибка:
app_global_lists_choices.users - это строка в которой перечисляются id
те надо с начал выдернуть оттуда искомую позицию и ее уже подставлять для поиска:

Таким образом родилось:
SELECT count(app_global_lists_choices.name) FROM app_global_lists_choices WHERE app_global_lists_choices.users = app_global_lists_choices.users LIKE '%23%' AND app_global_lists_choices.users != ''

'%23%' - это номер записи и с ней count работает, а надо переменную подставить e.id - но вот как ее туда подставить ума не приложу:
'%'+e.id+'%'
'%"'+e.id+'"%'
'%'&e.id&'%'
'%'e.id'%'
'%'||e.id||'%'
ни один вариант не подходит(

может кто нить дать подсказку и вообще я туда то хоть копаю?)

PS Странно если использовать GROUP_CONCAT. а вообще нужен то CONCAT (за глаза) то в самой базе SQL (админке) все работает и выдает (при значение '%23'%' ), а вот в программе - Пишет ОШИБКУ!(((

Re: Помогите написать SQL запрос

Добавлено: 15 окт 2020, 17:06
support

Re: Помогите написать SQL запрос

Добавлено: 15 окт 2020, 22:58
nruslan2
По синтаксису e.id и concat - чет забыл про такой способ объединения - СПАСИБО.
Количество записей теперь считает 100% правильно!

Странно и GROUP_CONCAT заработал с пятого раза но заработал))

СПАСИБО!

PS заметил странность На всех пользователях все верно выдало, а вот Администратор только по ему ведомой причине почему то входит в разные записи списка (хотя он там и не указан)

Re: Помогите написать SQL запрос

Добавлено: 16 окт 2020, 06:34
support
Это помтоу что в условии у вас like
корректнее сделать

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

find_in_set(e.id,app_global_lists_choices.users)

Re: Помогите написать SQL запрос

Добавлено: 16 окт 2020, 21:56
nruslan2
Спасибо - вот теперь работает все как надо) Хотя и до этого лишними условиями обложился, но там очень длинная строка запроса получалась)

Re: Помогите написать SQL запрос

Добавлено: 12 ноя 2020, 13:00
nruslan2
Дабы не плодить темы - помоги в очередной раз еще один запрос написать:

Идея есть сущность (app_entity_60) с полем часы (field_656) которые заполняются постоянно разными сотрудниками
Подскажите как через SQL написать запрос чтобы можно было увидеть удельный вес поля часы для каждого сотрудника:
(Те как надо обратиться к базе SQL чтобы добыть данные конкретного поля и при этом добыть сумму всех данные значений принадлежащих определённому человеку):

Select q.summa*app_entity_60.field_656
From app_entity_60, (SELECT sum(app_entity_60.field_656) as summa FROM app_entity_60 where app_entity_60.created_by=e.created_by) q
Where
app_entity_60.id=e.id

данная конструкция не работает пишет, что не понимает e.created_by

Re: Помогите написать SQL запрос

Добавлено: 13 ноя 2020, 11:35
nruslan2
Может кому пригодится
Методом проб и ошибок написал рабочий SQL (если не правильно то поправьте!)

так не работало
Select q.summa*app_entity_60.field_656
From app_entity_60, (SELECT sum(app_entity_60.field_656) as summa FROM app_entity_60 where app_entity_60.created_by=e.created_by) q
Where
app_entity_60.id=e.id
Говорило, что не понимает что за поле e.created_by - если даже в where вложить все равно не понимает такого поля - не знаю почему), НО:
Если вложить Select в саму выборку:
Select (SELECT sum(app_entity_60.field_656) FROM app_entity_60 where app_entity_60.created_by=e.created_by)*app_entity_60.field_656
From app_entity_60
Where app_entity_60.id=e.id

То все заработало)
Если не правильно то дайте знать плиз!!