powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не работает запрос
15 сообщений из 15, страница 1 из 1
Не работает запрос
    #39766096
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. народ, помогите составить SQL-запрос правильно.
Есть 2 таблицы: nps и b_iblock_section

У них вот такие поля:

Задача вот такая: Нужно выбрать название отдела (nps.dep_name), ID отдела (nps.dep_id), ID родительского отдела (b_iblock_section.IBLOCK_SECTION_ID), название родительского отдела (b_iblock_section.NAME) , ID и название ПРАродительского отдела.

В таблице b_iblock_section содержится информация об всех отделах.

У меня получилось пока только извлечь информацию по отделу, и его родителю, а вот как найти информацию о прародителе - не знаю. Вот код:

Код: sql
1.
2.
3.
Select b_iblock_section.NAME As 'Отдел', b_iblock_section.ID As 'ID Отдела', b_iblock_section.IBLOCK_SECTION_ID As 'ID родителя'
From b_iblock_section Join nps On b_iblock_section.ID=nps.dep_id
Group by b_iblock_section.IBLOCK_SECTION_ID




Помогите пожалуйста
...
Рейтинг: 0 / 0
Не работает запрос
    #39766098
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и вот 2-я таблица:
...
Рейтинг: 0 / 0
Не работает запрос
    #39766100
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В конечном итоге хочу сделать запрос, чтобы результат был в виде иерархии:

Прародитель (название)
----Родитель (название)
-------Отдел (название)
---------Таблица с информацией по отделу
...
Рейтинг: 0 / 0
Не работает запрос
    #39766218
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из наскальной живописи скриншотов вообще нифига не понятно. Структуру таблиц описывать словами у Вас лучше получается. Но и там не понятно, что такое nps и каким боком "название отдела (nps.dep_name)", если в запросе "b_iblock_section.NAME As 'Отдел'"

Если запрос верный, полагаю, нужно приджойнить b_iblock_section под алиасом, например, b_iblock_section_1 и условием связывания вроде b_iblock_section.IBLOCK_SECTION_ID = b_iblock_section_1.ID, соответственно, b_iblock_section_1.NAME As 'Родитель'. Аналогично с прародителем.
...
Рейтинг: 0 / 0
Не работает запрос
    #39766232
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица nps, у неё поля:

dep_id (номер подразделения организации), dep_name (название подразделения организации), points (баллы) к примеру вот с такими данными:

dep_id dep_name points
750 Отдел_5 56
720 Отдел_14 21
730 Отдел_21 35
115 Отдел_7 98



И есть другая таблица b_iblock_section c полями ID, IBLOCK_SECTION_ID (номер родителя), NAME (название отдела), к примеру вот с такими данными:

ID IBLOCK_SECTION_ID NAME

4 7 Отдел_кадров
3 9 Хозяйственный_отдел
730 750 Отдел_21
750 115 Отдел_14
8 46 Отдел_маркетинга


Названия отделов в таблице nps и в таблице полностью совпадают.

Из таблицы b_iblock_section видно номер отдела, и номер его родительского отдела, а вот номер "деда" мне и надо как то вычислить.
К примеру хочу узнать родительский и прародительский отдел для отдела 730.
Выбираю из таблицы nps запись с ID=730 и выбираю из этой же таблицы nps поле points.
Потом мне как то надо узнать родителя для отдела с ID=730.
Иду в таблицу b_iblock_section, выбираю у неё те записи, у которых ID=730. Получаю ID, IBLOCK_SECTION_ID и NAME

Получаю запись:
ID IBLOCK_SECTION_ID NAME
730 750 Отдел_21


Мне вот из этой записи надо как то ID родителя отдельно выдернуть, и присобачить в рамках этого же запроса. Это может быть и подзапрос, пока не знаю как именно оформить.

Но на выходе должно быть вот это:
ID IBLOCK_SECTION_ID NAME GRAND_SECTION_ID
730 750 Отдел_21 115


Вот я и прошу помочь такой запрос составить. В голову мысль пока не приходит, но чувствую что ответ где то на поверхности лежит.
...
Рейтинг: 0 / 0
Не работает запрос
    #39766239
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, так понимаю, таблица nps по сути только лишь баллы поставляет, а вся цепочка имен и айди имеется в b_iblock_section. Тогда, должно получиться как выше написал, только не имя, а соответствующий айди выбирать из следующей присоединенной таблицы.

Однако, следует уточнить ситуацию, когда родитель или вместе с ним и прародитель отсутствует - в таком случае вообще ничего не выдавать (нет строк в выборке) или выдавать запись с NULL в соответствующем поле. Это в общем случае можно решить видом джойна inner или left.
...
Рейтинг: 0 / 0
Не работает запрос
    #39766300
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, всё верно, таблица nps только для баллов. Понял, спасибо, сейчас буду пробовать...
...
Рейтинг: 0 / 0
Не работает запрос
    #39766303
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал вот такой запрос:

Код: sql
1.
2.
3.
Select b_iblock_section.NAME As 'Отдел', b_iblock_section.ID As 'ID Отдела', b_iblock_section.IBLOCK_SECTION_ID As 'ID родителя'
From b_iblock_section As b_iblock_section_1 Join nps On b_iblock_section.IBLOCK_SECTION_ID = b_iblock_section_1.ID
Group by b_iblock_section.IBLOCK_SECTION_ID



Оказался не рабочим. vkle , поможешь сам запрос составить?
...
Рейтинг: 0 / 0
Не работает запрос
    #39766327
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fenix_63, таблицу b_iblock_section использовать использовать дважды (трижды, четырежды и т.д., в зависимости от глубины копания предков), а не однократно. Так примерно:
Код: sql
1.
2.
3.
4.
FROM
  `b_iblock_section`
  LEFT JOIN `b_iblock_section` AS `b_iblock_section_1` ON `b_iblock_section`.`IBLOCK_SECTION_ID` = `b_iblock_section_1`.`ID`
  
...
Рейтинг: 0 / 0
Не работает запрос
    #39766329
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fenix_63Из таблицы b_iblock_section видно номер отдела, и номер его родительского отдела, а вот номер "деда" мне и надо как то вычислить.Использовать 2 копии таблицы
Код: sql
1.
2.
from table as t1 
join table as t2 on t1.id = t2.parent_id
...
Рейтинг: 0 / 0
Не работает запрос
    #39766332
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал вот такой запрос:


Код: sql
1.
2.
Select BIS.ID, BIS.IBLOCK_SECTION_ID As 'Parent_ID', BIS1.IBLOCK_SECTION_ID as 'Grand_Parent'  From b_iblock_section as BIS
Join b_iblock_section as BIS1 ON BIS.IBLOCK_SECTION_ID=BIS1.ID



Вроде работает, но и ваши запросы сейчас тоже попробую...
...
Рейтинг: 0 / 0
Не работает запрос
    #39766333
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fenix_63,
Не имеет значения, как назвать копию. Лишь бы понятно было.
...
Рейтинг: 0 / 0
Не работает запрос
    #39766334
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас пробую ко всему этому делу таблицу nps прикрепить...
...
Рейтинг: 0 / 0
Не работает запрос
    #39766357
fenix_63
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вроде бы получилось, пока запрос вот такой вот:

Код: sql
1.
2.
3.
Select nps.dep_name as 'Отдел', nps.comment,nps.user_id , nps.date as 'Дата' , Table2.ID, Table2.Parent_ID, Table2.Grand_Parent From (Select BIS.ID, BIS.IBLOCK_SECTION_ID As 'Parent_ID', BIS1.IBLOCK_SECTION_ID as 'Grand_Parent'  From b_iblock_section as BIS
Join b_iblock_section as BIS1 ON BIS.IBLOCK_SECTION_ID=BIS1.ID) as Table2, nps
Where nps.dep_id=Table2.ID
...
Рейтинг: 0 / 0
Не работает запрос
    #39766377
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А подзапрос-то тут на зачем?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не работает запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]