Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) попасть в индекс... (число прочтений - 2346 )
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
попасть в индекс...
02. Июня 2009 :: 14:18
Печать  
Задача попасть в индекс при отборе только групп справочника

Код
Выбрать все
SELECT спр.id as [Группа $Справочник.товары]
FROM $Справочник.товары as спр
WHERE 		ISFOLDER	 =1
 


не попадаем, вопрос как это сделать?
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: попасть в индекс...
Ответ #1 - 02. Июня 2009 :: 14:32
Печать  
PARENTID,ISFOLDER,...
Написать что-то вроде
where isfolder = 1 and parentid = '     0   '  Подмигивание
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #2 - 02. Июня 2009 :: 15:32
Печать  
Индекс
PARENTID,ISFOLDER,CODE(UPPER) 
т.е. рекурсивно (с пустого PARENTID) элементарно
Хранимую и для ДБФ и для SQL наверно можно написать.
  
Наверх
 
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: попасть в индекс...
Ответ #3 - 02. Июня 2009 :: 15:39
Печать  
м.попробовать

Код
Выбрать все
SELECT спр.id as [Группа $Справочник.товары]
FROM $Справочник.товары as спр
WHERE спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR) like спр.PARENTID+'1' ...
 



(или что то вроде WHERE Сред(спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR),10,1)='1'

- не помню функцию в фоксе  Печаль каж. SUBSTR() )

но врядли б.быстрее, чем просто WHERE ISFOLDER       =1
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #4 - 03. Июня 2009 :: 07:52
Печать  
ol писал(а) 02. Июня 2009 :: 15:39:
м.попробовать

Код
Выбрать все
SELECT спр.id as [Группа $Справочник.товары]
FROM $Справочник.товары as спр
WHERE спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR) like спр.PARENTID+'1' ...
 



(или что то вроде WHERE Сред(спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR),10,1)='1'

- не помню функцию в фоксе  Печаль каж. SUBSTR() )

но врядли б.быстрее, чем просто WHERE ISFOLDER       =1


Вообще то для ДБФ быстрее на пару порядков.Для корня
Код
Выбрать все
WHERE спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.CODE) =$ПустойИД+'1'  


Для ветвей

Код
Выбрать все
SELECT спр.id as [Группа $Справочник.товары]
FROM $Справочник.товары as спр
INNER JOIN Cyrsor as Курсор ON
спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR) =Курсор.ID+'1'  


где Cyrsor - временная таблица с группами вышестоящего уровня
Установка SET ANSI OFF
  
Наверх
 
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: попасть в индекс...
Ответ #5 - 03. Июня 2009 :: 08:03
Печать  
а без курсора - его же тоже надо создавать и при этом как то попасть в индекс  Улыбка

Код
Выбрать все
WHERE substr(спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR),10,1)='1'

или
WHERE substr(спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.code),10,1)='1'

 



будет намного медленней ?
интересно услышать у автора, что получилось
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #6 - 03. Июня 2009 :: 08:58
Печать  
ol писал(а) 03. Июня 2009 :: 08:03:
а без курсора - его же тоже надо создавать и при этом как то попасть в индекс  Улыбка

Код
Выбрать все
WHERE substr(спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR),10,1)='1'

или
WHERE substr(спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.code),10,1)='1'

 



будет намного медленней ?
интересно услышать у автора, что получилось


Это выражение вообще не попадает никак.
...
Курсор элементарно - берется нулевой уровень находятся группы 1 уровня и кладутся в курсор.
Потом находятся группы 2 уровня по группам 1 уровня и кладутся в курсор2.
и т.д.
Каждый раз используется индекс, кроме групп заодно длегко получить их уровень,
что в основном и требуется.
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: попасть в индекс...
Ответ #7 - 03. Июня 2009 :: 09:07
Печать  
Цитата:
WHERE спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR) like спр.PARENTID+'1' ...

такой конструкцией в индекс не попасть,
с курсорами это хорошо, но их тоже построить надо.
а эта задача сводится к начальной Подмигивание
  
Наверх
 
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: попасть в индекс...
Ответ #8 - 03. Июня 2009 :: 09:20
Печать  
Цитата:
Курсор элементарно - берется нулевой уровень находятся группы 1 уровня и кладутся в курсор.
Потом находятся группы 2 уровня по группам 1 уровня и кладутся в курсор2.
и т.д.
Каждый раз используется индекс, кроме групп заодно длегко получить их уровень,
что в основном и требуется.


т.е. делаем курсор в цикле:
вначале

Код
Выбрать все
WHERE спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.CODE) =$ПустойИД+'1'
 



получаем первый курсор Курсор_0;

потом
Код
Выбрать все
INNER JOIN Курсор_0 ON
спр.PARENTID+STR(спр.ISFOLDER,1)+UPPER(спр.DESCR) =Курсор_0.ID+'1'
 



получится .Курсор_1, который потом объединим с _0 (или м. при этом дописать Курсор_0 ??)

в общем задача решается
  
Наверх
ICQ  
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: попасть в индекс...
Ответ #9 - 03. Июня 2009 :: 09:28
Печать  
интересно, правда, можно ли это все воткнуть в один запрос ?
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: попасть в индекс...
Ответ #10 - 03. Июня 2009 :: 09:39
Печать  
ol писал(а) 03. Июня 2009 :: 09:28:
интересно, правда, можно ли это все воткнуть в один запрос ?


Хранимая процедура называется Улыбка
  
Наверх
 
IP записан
 
ol
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 272
Местоположение: Санкт-Петербург
Зарегистрирован: 24. Января 2009
Пол: Мужской
Re: попасть в индекс...
Ответ #11 - 03. Июня 2009 :: 09:53
Печать  
kiruha писал(а) 02. Июня 2009 :: 15:32:
Индекс
PARENTID,ISFOLDER,CODE(UPPER) 
т.е. рекурсивно (с пустого PARENTID) элементарно
Хранимую и для ДБФ и для SQL наверно можно написать.


а ведь все уже здесь было написано  Улыбка
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать