Помогите написать SQL запрос
Помогите написать SQL запрос
Имеем:
1. Сущность Пользователи.
2. Глобальные списки
В глобальный список добавил список отделы - и в каждое значение отдела назначил пользователя.
И теперь хотелось бы чтобы в Сущности Пользователя автоматически отображались данные из Глобального списка, в данном случаи отображались Отделы. При чем в разные отделы может входить один и тот же пользователь.
Для этого в поле сущность Пользователи добавил поле тип MySQL Формула.
Но вот как написать запрос чтобы работало не выходит(
Написал вот такую конструкцию:
SELECT app_global_lists_choices.name FROM app_global_lists_choices WHERE app_global_lists_choices.users = e.id
Но вылезает ошибка что найдено более 1й записи - что соответствует действительности так как пользователь находится в двух записях Отделы.
Помогите пожалуйста написать правильный запрос. который выводил бы в столбик все Отделы в которых нашелся пользовтаель!
Спасибо.
1. Сущность Пользователи.
2. Глобальные списки
В глобальный список добавил список отделы - и в каждое значение отдела назначил пользователя.
И теперь хотелось бы чтобы в Сущности Пользователя автоматически отображались данные из Глобального списка, в данном случаи отображались Отделы. При чем в разные отделы может входить один и тот же пользователь.
Для этого в поле сущность Пользователи добавил поле тип MySQL Формула.
Но вот как написать запрос чтобы работало не выходит(
Написал вот такую конструкцию:
SELECT app_global_lists_choices.name FROM app_global_lists_choices WHERE app_global_lists_choices.users = e.id
Но вылезает ошибка что найдено более 1й записи - что соответствует действительности так как пользователь находится в двух записях Отделы.
Помогите пожалуйста написать правильный запрос. который выводил бы в столбик все Отделы в которых нашелся пользовтаель!
Спасибо.
- support
- Техническая поддержка
- Сообщения: 7661
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Помогите написать SQL запрос
Используйте функцию GROUP_CONCAT
http://htmllab.ru/mysql-function-group-concat/
https://www.w3resource.com/mysql/aggreg ... concat.php
http://htmllab.ru/mysql-function-group-concat/
https://www.w3resource.com/mysql/aggreg ... concat.php
Re: Помогите написать SQL запрос
Спасибо - но нашел еще проблему, так как: через 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'%' ), а вот в программе - Пишет ОШИБКУ!(((
Постепенно понял в чем ошибка:
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 запрос
По синтаксису e.id и concat - чет забыл про такой способ объединения - СПАСИБО.
Количество записей теперь считает 100% правильно!
Странно и GROUP_CONCAT заработал с пятого раза но заработал))
СПАСИБО!
PS заметил странность На всех пользователях все верно выдало, а вот Администратор только по ему ведомой причине почему то входит в разные записи списка (хотя он там и не указан)
Количество записей теперь считает 100% правильно!
Странно и GROUP_CONCAT заработал с пятого раза но заработал))
СПАСИБО!
PS заметил странность На всех пользователях все верно выдало, а вот Администратор только по ему ведомой причине почему то входит в разные записи списка (хотя он там и не указан)
- support
- Техническая поддержка
- Сообщения: 7661
- Зарегистрирован: 19 окт 2014, 18:22
- Имя: Харчишин Сергей
- Откуда: Крым, Евпатория
Re: Помогите написать SQL запрос
Это помтоу что в условии у вас like
корректнее сделать
корректнее сделать
Код: Выделить всё
find_in_set(e.id,app_global_lists_choices.users)Re: Помогите написать SQL запрос
Спасибо - вот теперь работает все как надо) Хотя и до этого лишними условиями обложился, но там очень длинная строка запроса получалась)
Re: Помогите написать SQL запрос
Дабы не плодить темы - помоги в очередной раз еще один запрос написать:
Идея есть сущность (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
Идея есть сущность (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 запрос
Может кому пригодится
Методом проб и ошибок написал рабочий 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
То все заработало)
Если не правильно то дайте знать плиз!!
Методом проб и ошибок написал рабочий 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
То все заработало)
Если не правильно то дайте знать плиз!!