Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL. Получить все дочерние элементы и, по ним вывести данные из другой таблицы 
:(
    Опции темы
JEEN
Дата 12.8.2013, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: 1
Всего: 1



Здравствуйте. Нужна помощь по составлению запроса, буду благодарен за любую помощь. Мне нужно вывести всех клиентов, проживающих в определенном субъекте РФ.

Есть таблица (geo), данные в ней представляют многоуровневый список
1. Субъект РФ
--- 2. Район
------ 3. Населенный пункт
----------4. Улицы

Geo
- id
- name
- level
- parent_id

Нам известен лишь ID субъекта РФ и нужно получить все улицы.

Дальше, необходимо вывести всех клиентов, проживающих на этих улицах.

Clients
- id
- fio
- street_id

Может легче добавить поле subject_id в таблицу clients и не париться?

Это сообщение отредактировал(а) JEEN - 12.8.2013, 13:12
PM MAIL   Вверх
FINANSIST
Дата 12.8.2013, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Статус: Жив
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 11.4.2008
Где: Москва

Репутация: нет
Всего: 23



с мускулом незнаком но на sql server попробовал бы вот так
Код

select * from Clients where street_id in
(select distinct g4.id from
geo g1 inner join geo g2 on g1.id=g2.parent_id
inner join geo g3 on g2.id=g3.parent_id
inner join geo g4 on g3.id=g4.parent_id
where g1.id = 'something') a1

ну это конечно если geo имеет только 4 уровня вложенности, иначе рекурсия...

Это сообщение отредактировал(а) FINANSIST - 12.8.2013, 13:46


--------------------
“...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности”
Эдуард Успенский, “Каникулы в Простоквашино”
PM MAIL ICQ   Вверх
JEEN
Дата 12.8.2013, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 8.3.2008

Репутация: 1
Всего: 1



FINANSIST, спасибо, по поставленной задаче все отлично работает! Но я немного упростил задачу... есть еще один момент. Района может и не быть, т.е. вот так

1. Субъект РФ
--- 2. -
------ 3. Населенный пункт
----------4. Улицы

Населенный пункт в таком случае сразу ссылается на субъект рф. Но level остается 3й.

UPD. Вот такой код у меня получился, работает. Еще раз спасибо!
Код

SELECT * FROM clients WHERE street_id in
            (select distinct g4.id from geo g1
            inner join geo g2 on g1.id = g2.parent_id
            inner join geo g3 on g2.id = g3.parent_id
            inner join geo g4 on g3.id = g4.parent_id
            where g1.id = 1) 
or street_id in 
            (select distinct gg3.id from geo gg1
            inner join geo gg2 on gg1.id = gg2.parent_id
            inner join geo gg3 on gg2.id = gg3.parent_id
            where gg1.id = 1


Это сообщение отредактировал(а) JEEN - 12.8.2013, 14:45
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1137 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.