Автор | Сообщение |
|
| постоянный участник
|
Пост N: 1550
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.09.10 02:48. Заголовок: Подсчет кол-ва записей по полям.... на "лету"
Есть база с полями KCITY, KSTREET, HOUSE, и т.д. Кол-во записей порядка 3-5 тыс. База проиндексирована: 1-индекс "KCITY" 2-индекс "KSTREET" 3-индекс "STR(KCITY)+STR(KSTREET)+UPPER(HOUSE)" и т.д. Как сделать БЫСТРЫЙ подсчет кол-ва записей на "лету" ? Т.е. юзер выбирает город, высвечивается кол-во записей в БД по этому городу, далее выбирает улицу по этому городу - высвечивается кол-во записей по этой улице и т.д.
|
|
|
Ответов - 15
[только новые]
|
|
|
| |
Пост N: 52
Зарегистрирован: 11.06.10
|
|
Отправлено: 11.09.10 08:50. Заголовок: Примерно так ordset..
Примерно так ordsetfocus(tag) // "STR(KCITY)+STR(KSTREET)+UPPER(HOUSE)" ordscope(0,str(KCITY)) ordscope(1,str(KCITY)) ordkeycount() // количество записей для количества улиц ordscope(0,str(KCITY)+STR(KSTREET)) ordscope(1,str(KCITY)+STR(KSTREET)) ordkeycount() // количество записей и так далее.
|
|
|
|
| постоянный участник
|
Пост N: 1551
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.09.10 11:38. Заголовок: AlexMyr пишет: Alex..
AlexMyr пишет: Спасибо большое. Я по документации видел ordscope, но он у меня не заработал... Интересно, а по скорости создание условного индекса быстрей будет ?
|
|
|
|
| постоянный участник
|
Пост N: 177
Зарегистрирован: 13.10.05
|
|
Отправлено: 15.09.10 19:13. Заголовок: ordscope - давно пол..
ordscope - давно пользуюсь условный индекс быстрее не будет- это создание условный индекс использую для сложной выборки где можно и подождать
|
|
|
|
| постоянный участник
|
Пост N: 1557
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.09.10 23:37. Заголовок: Vlad04 Спасибо бол..
Спасибо большое ! Остановился на условном индексе. Дальше нужно выбирать по адресу список домов и корпусов. А под ordscope переделываю другую часть программы, где долго идет подсчет кол-ва записей....
|
|
|
|
| |
Пост N: 1874
Зарегистрирован: 17.05.05
|
|
Отправлено: 17.09.10 23:41. Заголовок: Andrey пишет: Остан..
Andrey пишет: цитата: | Остановился на условном индексе. |
| Ну и не верно ! Не правильный подход в данном контексте.
|
|
|
|
| постоянный участник
|
Пост N: 1558
Зарегистрирован: 12.09.06
|
|
Отправлено: 18.09.10 11:47. Заголовок: Dima пишет: Ну и не..
Dima пишет: цитата: | Ну и не верно ! Не правильный подход в данном контексте. |
| Не понял ? Мне нужно: 1) подсчитать кол-во записей. 2) создать список домов по этим записям (по выбранной улице). Далее создать список корпусов и подъездов по дому ! Условный индекс все равно приходиться строить ! Строиться он ОЧЕНЬ быстро... даже и не чувствуется в задача по сетке.
|
|
|
|
| |
Пост N: 55
Зарегистрирован: 11.06.10
|
|
Отправлено: 20.09.10 09:38. Заголовок: Andrey пишет: Не по..
Andrey пишет: Уже есть индекс: Andrey пишет: цитата: | 3-индекс "STR(KCITY)+STR(KSTREET)+UPPER(HOUSE)" |
| по нему делается только ordscope и все что нужно Andrey пишет: цитата: | Мне нужно: 1) подсчитать кол-во записей. 2) создать список домов по этим записям (по выбранной улице). Далее создать список корпусов и подъездов по дому ! |
| этим ordscope и считается и создается список и тд, зачем условный индекс дополнительно?
|
|
|
|
| постоянный участник
|
Пост N: 1559
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.09.10 16:59. Заголовок: AlexMyr пишет: и со..
AlexMyr пишет: цитата: | и создается список и тд, зачем условный индекс дополнительно? |
| А как создать список ? Не пользовался ни разу другими средствами ! Я делаю примерно так: Скрытый текст cIndex := "Numkorp" cFilterTo := "KSTREET == "+ALLTRIM(STR(nStreet))+".AND.UPPER(cNumHOUSE)=='" cFilterTo += UPPER(Dom)+"' .AND. DELETED() == .F." cTag := "DOG_HOUSE" cFileIndx := M->SetTemp+"tmp_recno_dogovor_house.cdx" IF FILE (cFileIndx) DELETE FILE (cFileIndx) // всегда удалять индекс-файл (на всякий случай) ENDIF SELECT DOGOVOR DBSetOrder(6) GOTO TOP SEEK(nStreet) INDEX ON &cIndex TAG(cTag) TO (cFileIndx) FOR &cFilterTo ADDITIVE nKolvoHouse := ORDKEYCOUNT() ...... aKorpus := {} ; nKorp2 := 0 // Подсчет и вывод КОРПУСОВ по ДОМУ DBSetOrder(7) FOR nJ := 1 TO nKolvoHouse ORDKEYGOTO(nJ) IF nKorp2 # FIELD->Numkorp IF FIELD->Numkorp # 0 AADD( aKorpus, ALLTRIM(STR(FIELD->Numkorp)) ) ENDIF nKorp2 := FIELD->Numkorp ENDIF NEXT // а дальше вывод списка корпусов на экран ....
|
|
|
|
|
| |
Пост N: 56
Зарегистрирован: 11.06.10
|
|
Отправлено: 20.09.10 19:15. Заголовок: use your_table index..
use your_table index on STR(KCITY)+STR(KSTREET)+UPPER(HOUSE) to file_index tag tt1 ordsetfocus("tt1") ordscope(0,str(город1)) ordscope(1,str(город1)) dbgotop() ordkeycount() // количество записей dbedit() // тут список по конкретному городу или свой browse // дальше клацаешь enter ordscope(0,str(город1)+str(улица1)) ordscope(1,str(город1)+str(улица1)) dbgotop() ordkeycount() // количество записей dbedit() // тут список по конкретному городу плюс по улице ну и так далее
|
|
|
|
| |
Пост N: 57
Зарегистрирован: 11.06.10
|
|
Отправлено: 20.09.10 19:21. Заголовок: по такому принципу у..
по такому принципу у меня работает многоуровневый справочник, номер уровня записывается в массив, а ordscope фильтрует записи и показывает через browse в hwgui. Все просто.
|
|
|
|
| постоянный участник
|
Пост N: 1560
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.09.10 00:58. Заголовок: AlexMyr Спасибо бо..
AlexMyr Спасибо большое за методику ! Буду применять у себя в дальнейшем.
|
|
|
|
|
| постоянный участник
|
Пост N: 1689
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.02.11 00:08. Заголовок: AlexMyr пишет: use ..
AlexMyr пишет: цитата: | use your_table index on STR(KCITY)+STR(KSTREET)+UPPER(HOUSE) to file_index tag tt1 ordsetfocus("tt1") ordscope(0,str(город1)) ordscope(1,str(город1)) dbgotop() ordkeycount() // количество записей dbedit() // тут список по конкретному городу или свой browse // дальше клацаешь enter ordscope(0,str(город1)+str(улица1)) ordscope(1,str(город1)+str(улица1)) dbgotop() ordkeycount() // количество записей dbedit() // тут список по конкретному городу плюс по улице ну и так далее |
| Переделал. Появилась разница в кол-ве записей. Т.е. подсчитываются удаленные записи. Как от них избавиться ?
|
|
|
|
| |
Пост N: 78
Зарегистрирован: 02.10.08
|
|
Отправлено: 25.02.11 11:34. Заголовок: index on STR(KCITY)+..
index on STR(KCITY)+STR(KSTREET)+UPPER(HOUSE) tag tt1 to file_index for !deleted()
|
|
|
|
| постоянный участник
|
Пост N: 1690
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.02.11 11:47. Заголовок: Loach пишет: index ..
Loach пишет: цитата: | index on STR(KCITY)+STR(KSTREET)+UPPER(HOUSE) tag tt1 to file_index for !deleted() |
| Не хотелось бы это использовать.... А другие варианты есть ?
|
|
|
|
| |
Пост N: 79
Зарегистрирован: 02.10.08
|
|
Отправлено: 25.02.11 13:15. Заголовок: Andrey пишет: А дру..
Andrey пишет: К сожалению SET DELETED тут не срабатывает. Ну, например как такой вариант: index on iif(your_table->(deleted()),'1','0')+STR(KCITY)+STR(KSTREET)+UPPER(HOUSE) tag tt1 to file_index и тогда соответственно ordscope(0,"0"+str(город1)) ordscope(1,"0"+str(город1))
|
|
|
|