Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отсортировать данные / 10 сообщений из 10, страница 1 из 1
28.04.2008, 07:35
    #35282658
ННовичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Как отсортировать данные в символьном поле....если я сортирую, уау символьное, то получается следущее
1
1.1
1.1.1
....
10
10.1
10.1.1
2
2.1
2.1.1
ну и т.д.....
...
Рейтинг: 0 / 0
28.04.2008, 07:51
    #35282669
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Сначала надо привести к виду пригодному для сортировки в нужном тебе порядке. Например:
1 => 001.000.000
1.1.1 => 001.001.001
10.1.1 => 010.001.001

[SRC=http://www.sql.ru/forum/actualthread.aspx?tid=531522]Тут[/SRC] подобное обсуждали
...
Рейтинг: 0 / 0
28.04.2008, 08:20
    #35282686
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Ссылку неправильно оформил. Тут смотри
...
Рейтинг: 0 / 0
28.04.2008, 08:41
    #35282703
ННовичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Спасибо, только, как я слышал, не рекомендуют приименять UDF в индексировании..., желательно через стандартные....вот родилось в результате эксперементов...
INDEX on STRTRAN(STR(VAL(SUBSTR(kod_usl,1,AT(".",kod_usl)-1)),3)," ","0");
+STRTRAN(STR(VAL(SUBSTR(kod_usl,1,AT(".",kod_usl)+1)),3)," ","0");
+STRTRAN(STR(VAL(SUBSTR(kod_usl,RAT(".",kod_usl)+1)),3)," ","0") TO x
...
Рейтинг: 0 / 0
28.04.2008, 08:44
    #35282706
ННовичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Правда, подумал сейчас нет в этом решении универсальности...текст загоняется с Excel, и сколько там будет подразделов неизветно..надо конечно додумывать...но будут претензии будем думать дальше....
...
Рейтинг: 0 / 0
28.04.2008, 10:01
    #35282807
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
ННовичокСпасибо, только, как я слышал, не рекомендуют приименять UDF в индексировании...
Вылазят проблемы из-за того что функция м.б. не всегда доступна. Но если используешь курсоры (или временные таблицы), то можно сначала выборку сделать потом курсор проиндексировать с UDF, тут можно самодельную функцию в индексное выражение вставить.

Чтобы универсально работало (независимо от кол-ва точек) функция должна преобразовывать примерно так:
1 => "001."
1.1.1 => "001.001.001."
10.1 => "010.001."
...
Рейтинг: 0 / 0
28.04.2008, 10:07
    #35282822
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Еще один вариант - хранить в отдельном поле порядок сортировки. Т.е. добавляешь поле int и проставляешь значения чтобы при сортировке по ним все вышло в нужном порядке.
1 => 1
1.1.1 => 10
10.1.1 => 5000

Минус - при любом добавлении/изменении надо это поле расчитывать. Если будешь делать - разрывы между соседними записями оставляй, чтобы в будущем между ними можно было вставку сделать.
...
Рейтинг: 0 / 0
28.04.2008, 10:49
    #35282932
ННовичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Спасибо...
...
Рейтинг: 0 / 0
28.04.2008, 10:52
    #35282939
ННовичок
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Спасибо...
...
Рейтинг: 0 / 0
28.04.2008, 14:31
    #35283586
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отсортировать данные
Dima TЕще один вариант - хранить в отдельном поле порядок сортировки. Т.е. добавляешь поле int и проставляешь значения чтобы при сортировке по ним все вышло в нужном порядке.
1 => 1
1.1.1 => 10
10.1.1 => 5000

Минус - при любом добавлении/изменении надо это поле расчитывать. Если будешь делать - разрывы между соседними записями оставляй, чтобы в будущем между ними можно было вставку сделать.

Проще в этом дополнительном поле не порядковый номер хранить, а то же самое значение, но в виде удобном для сортировки

1 => 000000001
1.1.1 => 001001001
10.1.1 => 010001001

На каждый уровень 3 знака с ведущими нулями. Если уровней может быть больше 3, то выделяешь символьную строку длиной 3*х, где х - максимально возможное число уровней вложенности.

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


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