Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 SQL запрос  [new]
malec
Member

Откуда: Украина
Сообщений: 123
Есть таб. ATE.dbf - справочник районов, городов,улиц.

fields :code(i), name(c50), parent(i)

code - код
name - название
parent - код вышестоящего (типа code Москвы а его parent - код Московской области)

Вопрос: можно ли одним запросом пройтись по єтой цепочке чтоб получить
строку типа: Росия, Московская обл., г.Москва, ул. Койкого

или всё-таки прийдётся через Do While делать?
Кто умеет подскажите пожалуйста.
Всем огромное спасибо!
15 дек 04, 10:41    [1181841]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Станислав C.
Member

Откуда: Екатеринбург
Сообщений: 1030
malec
Есть таб. ATE.dbf - справочник районов, городов,улиц.

fields :code(i), name(c50), parent(i)

code - код
name - название
parent - код вышестоящего (типа code Москвы а его parent - код Московской области)

Вопрос: можно ли одним запросом пройтись по єтой цепочке чтоб получить
строку типа: Росия, Московская обл., г.Москва, ул. Койкого

или всё-таки прийдётся через Do While делать?
Кто умеет подскажите пожалуйста.
Всем огромное спасибо!

Ну Вы, блин, наделали . Такой справочник как у Вас называется рекурсивным (ссылка parent ведет на code из того же справоника). И, соответственно, для получения необходимой Вам информации надо будет использовать рекурсию (do while, если хотите).
OFF:
Более правильно (с точки зрения построения реляционной БД) было бы разбить справочник на справочники:
- страны;
- города;
- области;
- улицы;
А вот по этим справоникам сделать запрос - вопрос пары минут работы...
15 дек 04, 11:13    [1181964]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Hel!Riser
Member

Откуда: Нижний Новгород
Сообщений: 972
если Фокс от 8 то примерна вота
SELECT IIF(ISNULL(upp.name),'',upp.name) + ' / ' + IIF(ISNULL(up.name),'',up.name) + ' / ' + IIF(ISNULL(u.name),'',u.name) ;
	FROM ate u ;
	LEFT OUTER JOIN ate up ON IIF(ISNULL(u.parent),0,u.parent) = IIF(ISNULL(up.code),0,up.code) ;
	LEFT OUTER JOIN ate upp ON IIF(ISNULL(up.parent),0,up.parent) = IIF(ISNULL(upp.code),0,upp.code) ;
	WHERE u.code = nCode
а ежели ниже - тогда тока с рекурсивным поднятием\опусканием по веткам
15 дек 04, 11:28    [1182025]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
malec
Member

Откуда: Украина
Сообщений: 123
Ну вопервых меньше таблиц, вовторых легко строить Treeview.
в третьих в основной таб. будет только одно поле для адреса, да и вложеность неограниченая
15 дек 04, 11:29    [1182029]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
FM32YO aka KID
Member

Откуда: Ukraine
Сообщений: 884
подписываю.. ибо только что закончил пилотный этап проджекта со справочниками улиц-домов-квартир
именно так как Станислав сказал...
15 дек 04, 11:29    [1182032]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Hel!Riser
Member

Откуда: Нижний Новгород
Сообщений: 972
а я за мальца :) РСУБД предоставлет выбор - либа рекурсию, либа нормализуй по сущностям. Так шта какая модель - предпочтения разработчика. И их (модели) можна и нужна пользовать фсякие
15 дек 04, 11:38    [1182079]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Chuveljov Andrew
Member

Откуда: Санкт-Петербург
Сообщений: 86
Насчёт структуры сложный вопрос.
Рекурсивный вариант позволяет обойти тот бардак с адресами (в том числе и зарубежными), когда неизвестно количество этих самых элементов.

Восстанавливать надо через рекурсивную функцию.

___________________
Всё вышеизложенное есть моё частное мнение и не претендует на полноту изложения.
15 дек 04, 11:38    [1182081]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
malec
Member

Откуда: Украина
Сообщений: 123
2 Hel!Riser

Супер!!!

Работает!!!

Огромное спасибо!!!
15 дек 04, 11:41    [1182095]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
malec
Member

Откуда: Украина
Сообщений: 123
Одно но !
Показывает только три вложености.
Район, город, улица.
А больше можно?
15 дек 04, 11:50    [1182141]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
AleksMed
Member

Откуда: Россия, Серпухов-Москва
Сообщений: 1546
Разобрав внимательно запрос от Hel!Risera ты все поймешь и нарастишь вложенность. Удачи :)
15 дек 04, 12:02    [1182189]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
malec
Member

Откуда: Украина
Сообщений: 123
Спасибо и на этом.

И то хлеб!
15 дек 04, 12:07    [1182212]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi malec!

ЛУЧШЕ всё-же через DO WHILE - это как раз и позволит раскрывать
неограниченные по вложенности структуры - где-то 3 уровня, где-то 6
:)
А насчёт структуры - не слушай недоброжелателей - нормальная у тебя
структура :)

Posted via ActualForum NNTP Server 1.1

18 дек 04, 23:54    [1191413]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить