On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
Администратор




Пост N: 512
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 31.05.07 14:01. Заголовок: тривиальная задачка


имеется справочник населенных пунктов: 2 поля, код и наименование

2-я - таблица: рассояние между нп: 3 поля - код1, код2 и км (километраж)

как лучше сделать индексы, чтобы, имея 1 запись для расстояния:
скажем Франкфурт-на-Одере - Дортмунд 570 км (записи Дортмунд - Франкфурт-на -Одере нет) выбирать по SCOPE все расстояния и для Франуфурта и для Дортмунда вне зависимости, в каком поле: код1 или код2 находится код нужного нп


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 12 [только новые]





Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 31.05.07 15:26. Заголовок: Re:


Смотря какой клиппер :)) На хХарборе можно было бы так -

index on Любой to Test' CUSTOM ADDITIVE
go top
while !eof()
if &uslov //uslov:='код1="ляля" .OR. код2="ГаГа"'
ORDKEYADD("TEST","test.cdx",Любой)
endif
Dbskip()
enddo

MsgWait( " Фильтр установлен",,1 )


Спасибо: 0 
Цитата Ответить
администратор




Пост N: 702
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 31.05.07 15:35. Заголовок: Re:


Не очень понял ;)
Имеем записи
1. 1 2
2. 8 1
3. 1 4
4. 1 6
5. 4 6

Нужно показать 1,2,3,4 записи для кода 1 , так ?

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 31.05.07 15:42. Заголовок: Re:


Dima пишет:

 цитата:
Нужно показать 1,2,3,4 записи для кода 1 , так ?


Я понял так :)))

Спасибо: 0 
Цитата Ответить
администратор




Пост N: 703
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 31.05.07 17:20. Заголовок: Re:


Ходил , думал , пил кофе , ходил.........не вижу вариантов со SCOPE и хитрым ключиком.
Если используется SIX , тогда и думать не чего ;)
Создаем индекс и ставим оптимизированный фильтр к примеру. Все остальные варианты так же сводятся
к SIX.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 66
Зарегистрирован: 15.12.06
ссылка на сообщение  Отправлено: 01.06.07 09:23. Заголовок: Re:


Можно вот что: во-первых, перелопатить базу, чтобы код1 всегда был, скажем, больше код2. Если же это сложно или невозможно, то так: index on (if(код1>код2,код1+код2,код2+код1)) - это если коды символьные,
если числа, то str() - в общем, надеюсь, в целом идея понятна. Конечно, и поиск придётся делать немного по-другому, с учётом "<>".

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 01.06.07 09:25. Заголовок: Re:


Dima пишет:

 цитата:
не вижу вариантов со SCOPE и хитрым ключиком


SCOPE это лишь один из вариантов работы с индексами. Пример другого варианта , создание временных индексов смотри выше :))
Не сложнее и не медленнее :))) Для клиппера 5.3 годится, к тому же можно и более сложные выборки создавать.
Без SIX'а


Спасибо: 0 
Цитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 01.06.07 09:41. Заголовок: Re:


Предложение - автоматически добавлять вторую запись - для комбинации {K1, K2, X}
->{K2,K1,X} - при корректировке одной из них - корректировать вторую. Результат поиска - не зависит от порядка следования - всегда найдется одна из двух записей

Спасибо: 0 
Цитата Ответить



Пост N: 21
Зарегистрирован: 03.04.07
ссылка на сообщение  Отправлено: 01.06.07 23:09. Заголовок: Re:


Pasha пишет:

 цитата:
скажем Франкфурт-на-Одере - Дортмунд 570 км (записи Дортмунд - Франкфурт-на -Одере нет)



Добавь поле код3, которое должно автоматически заполняться/коррек-ся при вводе/коррек-ки поля код1.
При вводе комбинации "Фр.-на-Од. - Дор.", будешь иметь и комбинацию "Дор.- Фр.-на-Од."
Создаешь индексы: код1+код2 и код2+код3 и выбирай на здоровье по scope ...

Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 03.06.07 18:08. Заголовок: Re:


Индекс = iif(kod1<kod2,kod1+kod2,kod2+kod1)
Поиск - по (x1+x2) где x1 код первой точки x2 = второй


Спасибо: 0 
Цитата Ответить
Администратор




Пост N: 513
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.06.07 09:26. Заголовок: Re:


Всем спасибо за советы
Красивого решения так и не придумал
Создавать временные индексы каждый раз при выборе маршрута - не хочется,
скажем от Донецка до Амстердама может быть десяток промежуточных пунктов
Добавлять для каждого расстояния 2 записи - именно этого я хотел избежать
Решил поступить тривиально: создать 2 индекса по K1 и K2
Для выборки всех маршрутов от определенного пункта создаю пустой массив,
добавляю в него все записи по нужному значению по 1-му и по 2-му индексу и
затем задаю запрос не по рекордсет, а по массиву с возможность добавления в него нового маршрута при его отсутствии: добавления в массив приведет к добавлению в файл

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 45
Зарегистрирован: 11.12.06
ссылка на сообщение  Отправлено: 27.06.07 13:39. Заголовок: Re:


А какие проблемы?

1) любой рдд:
CODE1="V1" .or. CODE1="V2".or.CODE2="V1".or.CODE2="V2"

2) рдд с оптимизатором - то же самое выражение. Фильтр будет оптимизитрованным, если есть индексы по CODE1 и CODE2

3) Отдельная фича сикс (возможно, работает и в АДС)
CODE1 $ "V1 V2" .or. CODE2 $ "V1 V2"
Фильтр будет оптимизитрованным, если есть индексы по CODE1 и CODE2

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 06.01.08
ссылка на сообщение  Отправлено: 06.01.08 14:21. Заголовок: updated: оператор $ ..


updated: оператор $ КАТЕГОРИЧЕСКИ не рекомендуется к использованию в выражениях фильтра совместно с SIx

Знал, но забыл, опять нарвался :-(
на отдельных выражениях глючит так, что мало не покажется
в фильтре - полное говно, как это ни печально

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 203
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет