Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сменить сортировку в таблице / 10 сообщений из 10, страница 1 из 1
20.01.2014, 19:05
    #38532301
Nnnnnnnnnnnnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
Есть таблица входимости деталей вида (обозначения деталей такие напишу для наглядности):
уровенькудачто...110010001001100...110010001001200...110010001001300...210012001001210...210012001001220...210013001001310...210013001001320...310013101001311...............

Нужно отсортировать так, чтобы получилась таблица в которой наглядно виден состав изделия "1001000":
уровенькудачто...110010001001100...110010001001200...210012001001210...210012001001220...110010001001300...210013001001310...310013101001311...210013001001320...............

Целый день буксую
...
Рейтинг: 0 / 0
20.01.2014, 20:31
    #38532379
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
Код: sql
1.
select * from MyTable order by Что


или заранее создать индекс
Код: sql
1.
2.
use MyTable excl
index on Что tag Что


а при необходимости его использовать
Код: sql
1.
set order to Что in MyTable
...
Рейтинг: 0 / 0
20.01.2014, 20:40
    #38532388
Nnnnnnnnnnnnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
Dima T,
Не-не... Обозначения деталей вовсе не такие ровненькие (символьное поле которое может включать цифры, буквы и знак "."), просто для наглядности так написала.
...
Рейтинг: 0 / 0
20.01.2014, 20:47
    #38532396
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
Писать надо как есть, а не "для наглядности".
Так подойдет?
Код: sql
1.
select * from MyTable where куда = "1001000"
...
Рейтинг: 0 / 0
20.01.2014, 21:05
    #38532410
Nnnnnnnnnnnnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
Dima T,

Вся таблица - состав одного изделия "1001000". В него входят на первом уровне детали 1001100, 1001200, 1001300.
Второй уровень - это детали, которые входят в детали первого уровня и тд и тп.

На выходе должно быть по алфавиту 1001100 (дальше то, что входит в эту деталь на разных уровнях, если что-то есть), потом 1001200 (дальше то, что входит в эту деталь на разных уровнях, если что-то есть) и тд.


ЗЫ: Сильно сомневаюсь что здесь получится сделать что-либо одним только селектом, или я уж совсем отупела после болезни...
...
Рейтинг: 0 / 0
20.01.2014, 22:24
    #38532473
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
Древовидный справочник? Если общее количество уровней - не определенное, то одним запросом не получится...
...
Рейтинг: 0 / 0
20.01.2014, 22:53
    #38532490
Nnnnnnnnnnnnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
ВладимирМ,

Дерево, угу... Я сегодня из-за него сама себя уже деревом считаю (( Наворотила хз что, а толку чуть.
...
Рейтинг: 0 / 0
21.01.2014, 00:02
    #38532550
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
Здесь надо либо рекурсию делать, либо конструировать специальное поле сортировки. Впрочем, оба вариант требуют слегка "повернуть мозги" Хотя в принципе, ничего особо сложного

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
* Исходная таблица
create cursor curTree (nLevel i, ItemId c(7), ItemIdFrom c(7))
insert into curTree (nLevel, ItemId, ItemIdFrom) values (1, '1001000', '1001100')
insert into curTree (nLevel, ItemId, ItemIdFrom) values (1, '1001000', '1001200')
insert into curTree (nLevel, ItemId, ItemIdFrom) values (1, '1001000', '1001300')
insert into curTree (nLevel, ItemId, ItemIdFrom) values (2, '1001200', '1001210')
insert into curTree (nLevel, ItemId, ItemIdFrom) values (2, '1001200', '1001220')
insert into curTree (nLevel, ItemId, ItemIdFrom) values (2, '1001300', '1001310')
insert into curTree (nLevel, ItemId, ItemIdFrom) values (2, '1001300', '1001320')
insert into curTree (nLevel, ItemId, ItemIdFrom) values (3, '1001310', '1001311')

* Вход в рекурсию
* Результирующая таблица
create cursor curShow (nLevel i, ItemId c(7), ItemIdFrom c(7))

* Список элементов первого уровня
select * into cursor cur1 from curTree where nLevel = 1 order by ItemId
select cur1
scan
    insert into curShow (nLevel, ItemId, ItemIdFrom) values (cur1.nLevel, cur1.ItemId, cur1.ItemIdFrom)
    * вызов рекурсии
    do createLevel with cur1.nLevel, cur1.ItemIdFrom, ','+cur1.ItemId+','
endscan
use in cur1

*************************************
****************** рекурсивная процедура
*************************************
procedure createLevel
parameters tnLevel, tcItemId, tcParent

local lcCursorName
lcCursorName = SYS(2015)

select * into cursor &lcCursorName from curTree where nLevel = m.tnLevel + 1 and ItemId = m.tcItemId order by ItemId
select (m.lcCursorName)
scan
    * Проверка на "зацикливание"
    * Надо "подняться" в таблице curShow по родителям и проверить, 
    * что ItemId ни разу не встречался в текущей ветке
    if at(','+&lcCursorName..ItemId+',', tcParent) > 0
        * Зацикливание. Пропускаем текущий узел
        loop
    endif

    insert into curShow (nLevel, ItemId, ItemIdFrom) values (&lcCursorName..nLevel, &lcCursorName..ItemId, &lcCursorName..ItemIdFrom)
    * вызов рекурсии
    do createLevel with &lcCursorName..nLevel, &lcCursorName..ItemIdFrom, tcParent + &lcCursorName..ItemId+','
endscan
use in (m.lcCursorName)
return
...
Рейтинг: 0 / 0
21.01.2014, 00:09
    #38532556
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
Да, надеюсь, Вы в курсе, что в FoxPro количество уровней вложенности процедур ограничено. Для VFP9 - 128 уровней, для младших версий, если не ошибаюсь, 32. Это значит, что через рекурсии можно найти ветки с глубиной не более чем в 128 уровней для VFP9.

Если уровней больше, то придется решать задачу через введение поля сортировки
...
Рейтинг: 0 / 0
21.01.2014, 07:35
    #38532665
Nnnnnnnnnnnnnnnn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сменить сортировку в таблице
ВладимирМ,
Спасибо!
Пойду сравнивать с тем, что вчера накорябала.
Да, в курсе ) там максимум 24 уровня будет.

ЗЫ: Мозги как несмазанная телега скрипят после перерыва :-(
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Сменить сортировку в таблице / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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