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

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

Целый день буксую
...
Рейтинг: 0 / 0
Сменить сортировку в таблице
    #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
Сменить сортировку в таблице
    #38532388
Nnnnnnnnnnnnnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,
Не-не... Обозначения деталей вовсе не такие ровненькие (символьное поле которое может включать цифры, буквы и знак "."), просто для наглядности так написала.
...
Рейтинг: 0 / 0
Сменить сортировку в таблице
    #38532396
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Писать надо как есть, а не "для наглядности".
Так подойдет?
Код: sql
1.
select * from MyTable where куда = "1001000"
...
Рейтинг: 0 / 0
Сменить сортировку в таблице
    #38532410
Nnnnnnnnnnnnnnnn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T,

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

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


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

Дерево, угу... Я сегодня из-за него сама себя уже деревом считаю (( Наворотила хз что, а толку чуть.
...
Рейтинг: 0 / 0
Сменить сортировку в таблице
    #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
Сменить сортировку в таблице
    #38532556
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, надеюсь, Вы в курсе, что в FoxPro количество уровней вложенности процедур ограничено. Для VFP9 - 128 уровней, для младших версий, если не ошибаюсь, 32. Это значит, что через рекурсии можно найти ветки с глубиной не более чем в 128 уровней для VFP9.

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

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


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