|
Не работает запрос
|
|||
---|---|---|---|
#18+
Всем привет. народ, помогите составить 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.
Помогите пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2019, 18:01 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
и вот 2-я таблица: ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2019, 18:01 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
В конечном итоге хочу сделать запрос, чтобы результат был в виде иерархии: Прародитель (название) ----Родитель (название) -------Отдел (название) ---------Таблица с информацией по отделу ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2019, 18:02 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
Из наскальной живописи скриншотов вообще нифига не понятно. Структуру таблиц описывать словами у Вас лучше получается. Но и там не понятно, что такое 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 'Родитель'. Аналогично с прародителем. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2019, 22:37 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
Есть таблица 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 Вот я и прошу помочь такой запрос составить. В голову мысль пока не приходит, но чувствую что ответ где то на поверхности лежит. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2019, 23:36 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
В общем, так понимаю, таблица nps по сути только лишь баллы поставляет, а вся цепочка имен и айди имеется в b_iblock_section. Тогда, должно получиться как выше написал, только не имя, а соответствующий айди выбирать из следующей присоединенной таблицы. Однако, следует уточнить ситуацию, когда родитель или вместе с ним и прародитель отсутствует - в таком случае вообще ничего не выдавать (нет строк в выборке) или выдавать запись с NULL в соответствующем поле. Это в общем случае можно решить видом джойна inner или left. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 00:09 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
Да, всё верно, таблица nps только для баллов. Понял, спасибо, сейчас буду пробовать... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 09:12 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
Попробовал вот такой запрос: Код: sql 1. 2. 3.
Оказался не рабочим. vkle , поможешь сам запрос составить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 09:17 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
fenix_63, таблицу b_iblock_section использовать использовать дважды (трижды, четырежды и т.д., в зависимости от глубины копания предков), а не однократно. Так примерно: Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 10:01 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
fenix_63Из таблицы b_iblock_section видно номер отдела, и номер его родительского отдела, а вот номер "деда" мне и надо как то вычислить.Использовать 2 копии таблицы Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 10:03 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
Сделал вот такой запрос: Код: sql 1. 2.
Вроде работает, но и ваши запросы сейчас тоже попробую... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 10:05 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
fenix_63, Не имеет значения, как назвать копию. Лишь бы понятно было. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 10:11 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
Сейчас пробую ко всему этому делу таблицу nps прикрепить... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 10:13 |
|
Не работает запрос
|
|||
---|---|---|---|
#18+
Вроде бы получилось, пока запрос вот такой вот: Код: sql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2019, 10:51 |
|
|
start [/forum/topic.php?fid=47&fpage=40&tid=1829342]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 291ms |
total: | 415ms |
0 / 0 |