powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дерево, выборка
5 сообщений из 5, страница 1 из 1
Дерево, выборка
    #33494968
_Иван_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая структура
таблиц
категория продуктов
Структура древовидная
Код: plaintext
1.
2.
3.
CREATE TABLE 'CATEGORY.DBF' NAME 'CATEGORY' (CATEGID I NOT NULL, ;
                       PARENTID I NOT NULL, ;
                       NAMECAT C( 100 ) NOT NULL, ;
                       KOMMENS M NOT NULL)
2 таблица-продукты

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE 'PRODUCTS.DBF' NAME 'PRODUCTS' (PRODUCTID I NOT NULL, ;
                       CATEGORYID I NOT NULL, ;
                       PRODNAME C( 100 ) NOT NULL, ;
                       PRODNAMFUL C( 100 ) NOT NULL, ;
                       PRODDESCR M NOT NULL, ;
                       UNITORDER N( 10 ,  2 ) NOT NULL, ;
                       UNITPRICE N( 10 ,  2 ) NOT NULL, ;
                       KOMMENTS M NOT NULL)
Надо так:
вверху-дерево категорий продуктов,
внизу-грайд с продуктами
При клике на узел дерева, из таблицы категорий продуктов
должны выбираться все подчиненные продукты
несмотря на вложенность узлов.
Например:
Товар
Спиртное
Водка
"пшеничная"(это уже в таблице продуктов)
"московская"
Вино
"Рижское"
......
Пиво
.......
Одежда
итд.
Так вот например кликнул я на
"спиртное", и из таблицы PRODUCTS
должны выбраться все записи
относящиеся к спиртному.
Что-то почитал я форум и не обнаружил ничего подходящего
по моему вопросу.
"деревянный" вопрос он сложен для меня
спасибо.
...
Рейтинг: 0 / 0
Дерево, выборка
    #33495011
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в товары + дополнительное поле - линковку

символьное что -то типа 10_12_30_45_ (ID из категорий)
все узлы категорий там накручиваем и храним для каждого товара
по at(allt(str(id)+"_", .... ) потом ищем
...
Рейтинг: 0 / 0
Дерево, выборка
    #33495046
_Иван_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот что то сделал, по найденному в форуме
вроде бы навскидку прально работает
скорость конечно хилая,
как ускорить
и прально ли
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
m.id =  2 
  m.lev =  1 
  SELECT categId, parentid, namecat, m.lev as level FROM category ;
   WHERE categId = m.id INTO CURSOR Items READWRITE 
   
  DO WHILE _TALLY >  0  
     m.lev = m.lev +  1  
     INSERT INTO Items (categId, parentid, namecat,level ) ;
      SELECT categId, parentid, namecat, m.lev FROM category ;
       WHERE parentid in (select categId from Items ) ;
         AND categId NOT in (select categId from Items )
  ENDDO 
 
 *Выборка продуктов 
 SELECT Products.*;
 FROM labdata!products;
 WHERE Products.categoryid in (select categId from Items );
 INTO CURSOR Query2 READWRITE NOFILTER
...
Рейтинг: 0 / 0
Дерево, выборка
    #33495088
_Иван_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин паришься паришься ищешь
а как задал вопрочс на форуме, так и нашел сразу
Вроде приемлимый вариант по скорости
(не обращайте внимание на сокращение
количества полей в отличии от первого варианта
скорость на самом деле выросла)
Да и понятно почему,
там 2 вложенных запроса в условии....
а здесь объединение.

Вродь прально работает...
Есть ли аврианты ускорения второго запроса продуктов??
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
LOCAL lnLevel,lnKeyID
m.lnLevel  =  0 
lnKeyID= 2 

CREATE CURSOR  Result (KeyID I, Lev I)

INSERT INTO Result (KeyID, Lev) ;
SELECT categId, m.lnLevel FROM category WHERE categId= m.lnKeyID
DO WHILE _TALLY >  0 
m.lnLevel = m.lnLevel +  1 
INSERT INTO Result (KeyID, Lev) ;
SELECT category.categId, m.lnLevel FROM category ;
INNER JOIN Result ON category.ParentID = Result.KeyID AND Result.Lev = m.lnLevel -  1 
ENDDO

 *Выборка продуктов 
 SELECT Products.*;
 FROM products;
 WHERE Products.categoryid in (select categId from Result);
 INTO CURSOR Query2 READWRITE NOFILTER
...
Рейтинг: 0 / 0
Дерево, выборка
    #33495109
_Иван_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, почему то не первый ни 2 вариант
Рашмором не оптимизируются %-)
ни по 11 ни по 1 SYS(3054)
Индексы традиционые
CATEGID
PARENTID
и
PRODUCTID
CATEGORYID
Collate машинная и задана и у индексов.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дерево, выборка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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