powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Индексирование по составному выражению
19 сообщений из 19, страница 1 из 1
Индексирование по составному выражению
    #39601978
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется таблица:

Fio NameИванов ИванИванов ЯрославПетров ПетрСидоров Сидор
Если ее проиндексировать
Код: sql
1.
INDEX ON FIO TO indFio


а затем добавить новую запись, например, "Курочкин Дмитрий", то он займет нужное место

Fio NameИванов ИванИванов ЯрославКурочкин ДмитрийПетров ПетрСидоров Сидор

Как сделать сложный индекс по двум полям с возможностью манипулирования направлениями сортировки,
чтобы запись при добавлении занимала место согласно сортировке?

Т.е. таблица может быть ртсортирована разными способами:
Код: sql
1.
FIO ASC, NAME ASC


+ Иванов Леонид =

Fio NameИванов ИванИванов ЛеонидИванов ЯрославКурочкин ДмитрийПетров ПетрСидоров Сидор
Код: sql
1.
FIO ASC, NAME DESC


+ Иванов Леонид =

Fio NameИванов ЯрославИванов ЛеонидИванов ИванКурочкин ДмитрийПетров ПетрСидоров Сидор
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602008
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто указать все что надо в индексном выражении
Код: sql
1.
index on FIO+NAME ...
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602014
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне важно сохранить порядок сортировки полей, например, Fio desc + Name asc. Задача в целом заключается в том, чтобы в отсортированную таблицу вставить запись и она попала в нужное место. До этого у меня сортировка была по 1 полю и индексирование прекрасно работало. Для случая с 2-мя полями можно конечно пересоздать курсор после добавления записи с нужной сортировкой, но придется писать лишний код, например, переместить курсор на новую запись и прочее.
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602015
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenМне важно сохранить порядок сортировки полей, например, Fio desc + Name asc. Задача в целом заключается в том, чтобы в отсортированную таблицу вставить запись и она попала в нужное место. До этого у меня сортировка была по 1 полю и индексирование прекрасно работало. Для случая с 2-мя полями можно конечно пересоздать курсор после добавления записи с нужной сортировкой, но придется писать лишний код, например, переместить курсор на новую запись и прочее.
Ничего не понял. Чем мое предложение не угодило?
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602016
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenFio desc + Name asc
Понял что надо. Этот изврат можно сделать, сложно, но можно. Только непонятно зачем.
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602020
faustgreenМне важно сохранить порядок сортировки полей, например, Fio desc + Name asc.Сохранить где? Зачем? Задача в целом заключается в том, чтобы в отсортированную таблицу вставить запись и она попала в нужное место.А что, сейчас она попадает куда-то не туда? До этого у меня сортировка была по 1 полю и индексирование прекрасно работало.И почему решали, что индексирование по нескольким полям сделает что-то другое? Для случая с 2-мя полями можно конечно пересоздать курсор после добавления записи с нужной сортировкой,Зачем? Зачем пересоздавать? Что такое создание курсора с нужной сортировкой? но придется писать лишний код, например, переместить курсор на новую запись и прочее.Откуда вы всего этого набрались? Зачем сами себе создаете страшилки? Какое еще пересоздании курсоров если сортировка всего лишь побочный эффект от создания индексов, которое совершенно не требует пересоздания курсоров. У которых, в свою очередь, нет никаких сортировок. Смешались в кучу кони, люди...
Индексы в фоксе по ВЫРАЖЕНИЮ, в котором могут участвовать более одного поля. Индексов на таблице/курсоре может быть несколько, переключение между ними не требует никаких затрат. Индексы обновляются при вставке записей все. Отсяда совершенно непонятно где и какие проблемы вы нашли и решение каких проблем ищете.
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602044
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T, у меня не получилось построить индекс по вашему примеру.
Код: sql
1.
INDEX ON fio+name ...  - работает


Код: sql
1.
INDEX ON fio desс + name asc...  - ругается, что ошибка в строке


И у меня есть подозрения, что составные индексные выражения не строятся с помощью ASCENDING и DESCENDING. Если я не прав напишите, пожалуйста, как эта команда должна выглядеть полностью?
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602046
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильный проходящий., Курсор создается -
Код: sql
1.
select * from ... order by fio asc, name desc


Затем он используется в гриде, как источник данных. Если в этот курсор добавить новую запись, и курсор при этом не индексирован, то запись помещается в конец таблицы в гриде.
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602047
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот то, что написано в хелпе
Код: sql
1.
2.
3.
4.
5.
6.
INDEX ON eExpression TO IDXFileName | TAG TagName [OF CDXFileName]
[FOR lExpression]
[COMPACT]
[ASCENDING | DESCENDING]
[UNIQUE | CANDIDATE]
[ADDITIVE]


ASCENDING | DESCENDING - там есть, но они вроде как на весь индекс распространяются, а внутрь eExpression можно ли их засунуть ? У меня не вышло.
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602062
faustgreenправильный проходящий., Курсор создается -
Код: sql
1.
select * from ... order by fio asc, name desc


Затем он используется в гриде, как источник данных. Если в этот курсор добавить новую запись, и курсор при этом не индексирован, то запись помещается в конец таблицы в гриде.И что? Что мешает курсор проиндексировать?
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602065
faustgreen
Код: sql
1.
INDEX ON fio desс + name asc...  - ругается, что ошибка в строке


И у меня есть подозрения, что составные индексные выражения не строятся с помощью ASCENDING и DESCENDING. Если я не прав напишите, пожалуйста, как эта команда должна выглядеть полностью?
1. Синтаксис надо не придумывать самостоятельно, а изучать по документации к инструменту.
2. Указание направление сортировки относится к выражению, а не к его частям.
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602074
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot правильный проходящий.]faustgreen2. Указание направление сортировки относится к выражению, а не к его частям.

А если как раз таки нужно по частям? В этом то и вопрос ...
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602120
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenDima T, у меня не получилось построить индекс по вашему примеру.
Код: sql
1.
INDEX ON fio+name ...  - работает


Код: sql
1.
INDEX ON fio desс + name asc...  - ругается, что ошибка в строке


И у меня есть подозрения, что составные индексные выражения не строятся с помощью ASCENDING и DESCENDING. Если я не прав напишите, пожалуйста, как эта команда должна выглядеть полностью?
Как уже выше написали такой синтаксис фокс не поймет, поэтому надо извращаться, а точнее приводить строку к обратному написанию, т.е. преобразовать так чтобы две строки после преобразования сортировались в обратном порядке.

Например так
Код: sql
1.
2.
3.
4.
5.
6.
index on fio + reverse_str(name) tag fioname
...

func reverse_str
lpara tcStr
return chrtran(upper(tcStr), ' 0123456789АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ', 'ЯЮЭЪЫЬЩШЧЦХФУТСРПОНМЛКИЗЖЕДГВБА9876543210 ')
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602123
[quot faustgreen]правильный проходящий.пропущено...


А если как раз таки нужно по частям? В этом то и вопрос ...Составить правильно выражение.
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602143
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenправильный проходящий., Курсор создается -
Код: sql
1.
select * from ... order by fio asc, name desc


Затем он используется в гриде, как источник данных. Если в этот курсор добавить новую запись, и курсор при этом не индексирован, то запись помещается в конец таблицы в гриде.

Все просто. После добавления (а также изменения) просто получите курсор по новой, и никаких бубнов не надо.
Тем более, что обновятся не только эти данные, но и если кто то еще , что то поменял)
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602156
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего да, придется так делать, просто искал более красивый способ ...
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602702
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
index on fio + (name+fio) tag fioname
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602715
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreenСкорее всего да, придется так делать, просто искал более красивый способ ...
Упс... и чем же такой способ не красив?
По мне так он гораздо лучше всех этих индексирований курсоров.
Главное все ясно, даже через 10 лет
...
Рейтинг: 0 / 0
Индексирование по составному выражению
    #39602722
q1w1e1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INDEX on f+STR(1/VAL(CHRTRAN(i,"а,б,в,г,д,е,ё,ж,з","1,2,3,4,5,6,7,8,9")),7,5) TO x
так просто, как вариант, конечно включить upper или lower т.е. далее отработать этот вариант..
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Индексирование по составному выражению
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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