Категории

Построение дерева категорий изделий для заданного типа автомобиля (TYP_ID)

STR_ID
Номер категории
STR_DES_TEXT
Название категории
DESCENDANTS
Есть ли у этой категории подкатегории: 1 - Есть, 0 - Нет

Последовательно устанавливая следующие значения STR_ID, можно получить ещё 4 уровня дерева:
SET @STR_ID = 10001; Легковые автомобили
SET @STR_ID = 10102; Двигатель
SET @STR_ID = 10615; Кривошатунный механизм
SET @STR_ID = 10620; Поршень

SET @TYP_ID = 3822; /* ALFA ROMEO 145 (930) 1.4 i.e. [1994/07-1996/12] */
SET @LNG_ID = 16; /* 1 - Немецкий язык; 16 - Русский язык */
SET @STR_ID = NULL; /* Корень дерева */

SELECT STR_ID, TEX_TEXT AS STR_DES_TEXT, IF( EXISTS( SELECT * FROM SEARCH_TREE AS SEARCH_TREE2 WHERE SEARCH_TREE2.STR_ID_PARENT <=> SEARCH_TREE.STR_ID LIMIT 1 ), 1, 0) AS DESCENDANTS
FROM SEARCH_TREE
INNER JOIN DESIGNATIONS ON DES_ID = STR_DES_ID
INNER JOIN DES_TEXTS ON TEX_ID = DES_TEX_ID WHERE STR_ID_PARENT <=> @STR_ID AND DES_LNG_ID = @LNG_ID AND EXISTS
( SELECT * FROM LINK_GA_STR INNER JOIN LINK_LA_TYP ON LAT_TYP_ID = @TYP_ID AND LAT_GA_ID = LGS_GA_ID
INNER JOIN LINK_ART ON LA_ID = LAT_LA_ID WHERE LGS_STR_ID = STR_ID LIMIT 1 )


Вывод списка неоригинальных изделий для заданного типа автомобиля (TYP_ID) и категории (STR_ID)


LA_ART_ID
Ключ ART_ID соответствующего неоригинального изделия

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

SET @TYP_ID = 3822; /* ALFA ROMEO 145 (930) 1.4 i.e. [1994/07-1996/12] */
SET @STR_ID = 10630; /* Поршень в сборе; Можете использовать NULL для вывода ВСЕХ запчастей к автомобилю */

SELECT LA_ART_ID
FROM LINK_GA_STR
INNER JOIN LINK_LA_TYP ON LAT_TYP_ID = @TYP_ID AND LAT_GA_ID = LGS_GA_ID
INNER JOIN LINK_ART ON LA_ID = LAT_LA_ID
WHERE LGS_STR_ID <=> @STR_ID
ORDER BY LA_ART_ID
LIMIT 100;


Вывод списка неоригинальных изделий для заданной категории (STR_ID)


LAG_ART_ID
Ключ ART_ID соответствующего неоригинального изделия

Выводит изделия без учёта применимости к автомобилям

SET @STR_ID = 10630; /* Поршень в сборе */

SELECT LAG_ART_ID
FROM LINK_GA_STR
INNER JOIN LINK_ART_GA ON LAG_GA_ID = LGS_GA_ID
WHERE LGS_STR_ID = @STR_ID
ORDER BY LAG_ART_ID
LIMIT 100;


Вывод полного дерева категорий всех запчастей


STR_LEVEL
Уроверь категории
STR_TEXT
Название категории 1 уровня
STR_ID
ID категории 1 уровня
STR_TEXT2
Название категории 2 уровня
STR_ID2
ID категории 2 уровня
STR_TEXT3
Название категории 3 уровня
STR_ID3
ID категории 3 уровня
STR_TEXT4
Название категории 4 уровня
STR_ID4
ID категории 4 уровня
STR_TEXT5
Название категории 5 уровня
STR_ID5
ID категории 5 уровня
SET @LNG_ID = 16; /* 1 - Немецкий язык; 16 - Русский язык */

SELECT SEARCH_TREE.STR_LEVEL,
ELT(SEARCH_TREE.STR_LEVEL, DES_TEXTS.TEX_TEXT, DES_TEXTS2.TEX_TEXT, DES_TEXTS3.TEX_TEXT, DES_TEXTS4.TEX_TEXT, DES_TEXTS5.TEX_TEXT) AS STR_TEXT,
ELT(SEARCH_TREE.STR_LEVEL, SEARCH_TREE.STR_ID, SEARCH_TREE2.STR_ID, SEARCH_TREE3.STR_ID, SEARCH_TREE4.STR_ID, SEARCH_TREE5.STR_ID) AS STR_ID,
ELT(SEARCH_TREE.STR_LEVEL-1, DES_TEXTS.TEX_TEXT, DES_TEXTS2.TEX_TEXT, DES_TEXTS3.TEX_TEXT, DES_TEXTS4.TEX_TEXT, DES_TEXTS5.TEX_TEXT) AS STR_TEXT2,
ELT(SEARCH_TREE.STR_LEVEL-1, SEARCH_TREE.STR_ID, SEARCH_TREE2.STR_ID, SEARCH_TREE3.STR_ID, SEARCH_TREE4.STR_ID, SEARCH_TREE5.STR_ID) AS STR_ID2,
ELT(SEARCH_TREE.STR_LEVEL-2, DES_TEXTS.TEX_TEXT, DES_TEXTS2.TEX_TEXT, DES_TEXTS3.TEX_TEXT, DES_TEXTS4.TEX_TEXT, DES_TEXTS5.TEX_TEXT) AS STR_TEXT3,
ELT(SEARCH_TREE.STR_LEVEL-2, SEARCH_TREE.STR_ID, SEARCH_TREE2.STR_ID, SEARCH_TREE3.STR_ID, SEARCH_TREE4.STR_ID, SEARCH_TREE5.STR_ID) AS STR_ID3,
ELT(SEARCH_TREE.STR_LEVEL-3, DES_TEXTS.TEX_TEXT, DES_TEXTS2.TEX_TEXT, DES_TEXTS3.TEX_TEXT, DES_TEXTS4.TEX_TEXT, DES_TEXTS5.TEX_TEXT) AS STR_TEXT4,
ELT(SEARCH_TREE.STR_LEVEL-3, SEARCH_TREE.STR_ID, SEARCH_TREE2.STR_ID, SEARCH_TREE3.STR_ID, SEARCH_TREE4.STR_ID, SEARCH_TREE5.STR_ID) AS STR_ID4,
ELT(SEARCH_TREE.STR_LEVEL-4, DES_TEXTS.TEX_TEXT, DES_TEXTS2.TEX_TEXT, DES_TEXTS3.TEX_TEXT, DES_TEXTS4.TEX_TEXT, DES_TEXTS5.TEX_TEXT) AS STR_TEXT5,
ELT(SEARCH_TREE.STR_LEVEL-4, SEARCH_TREE.STR_ID, SEARCH_TREE2.STR_ID, SEARCH_TREE3.STR_ID, SEARCH_TREE4.STR_ID, SEARCH_TREE5.STR_ID) AS STR_ID5
FROM SEARCH_TREE
LEFT JOIN DESIGNATIONS ON DESIGNATIONS.DES_ID = SEARCH_TREE.STR_DES_ID AND DESIGNATIONS.DES_LNG_ID = @LNG_ID
LEFT JOIN DES_TEXTS ON DES_TEXTS.TEX_ID = DESIGNATIONS.DES_TEX_ID
LEFT JOIN SEARCH_TREE AS SEARCH_TREE2 ON SEARCH_TREE2.STR_ID = SEARCH_TREE.STR_ID_PARENT
LEFT JOIN DESIGNATIONS AS DESIGNATIONS2 ON DESIGNATIONS2.DES_ID = SEARCH_TREE2.STR_DES_ID AND DESIGNATIONS2.DES_LNG_ID = @LNG_ID
LEFT JOIN DES_TEXTS AS DES_TEXTS2 ON DES_TEXTS2.TEX_ID = DESIGNATIONS2.DES_TEX_ID
LEFT JOIN SEARCH_TREE AS SEARCH_TREE3 ON SEARCH_TREE3.STR_ID = SEARCH_TREE2.STR_ID_PARENT
LEFT JOIN DESIGNATIONS AS DESIGNATIONS3 ON DESIGNATIONS3.DES_ID = SEARCH_TREE3.STR_DES_ID AND DESIGNATIONS3.DES_LNG_ID = @LNG_ID
LEFT JOIN DES_TEXTS AS DES_TEXTS3 ON DES_TEXTS3.TEX_ID = DESIGNATIONS3.DES_TEX_ID
LEFT JOIN SEARCH_TREE AS SEARCH_TREE4 ON SEARCH_TREE4.STR_ID = SEARCH_TREE3.STR_ID_PARENT
LEFT JOIN DESIGNATIONS AS DESIGNATIONS4 ON DESIGNATIONS4.DES_ID = SEARCH_TREE4.STR_DES_ID AND DESIGNATIONS4.DES_LNG_ID = @LNG_ID
LEFT JOIN DES_TEXTS AS DES_TEXTS4 ON DES_TEXTS4.TEX_ID = DESIGNATIONS4.DES_TEX_ID
LEFT JOIN SEARCH_TREE AS SEARCH_TREE5 ON SEARCH_TREE5.STR_ID = SEARCH_TREE4.STR_ID_PARENT
LEFT JOIN DESIGNATIONS AS DESIGNATIONS5 ON DESIGNATIONS5.DES_ID = SEARCH_TREE5.STR_DES_ID AND DESIGNATIONS5.DES_LNG_ID = @LNG_ID
LEFT JOIN DES_TEXTS AS DES_TEXTS5 ON DES_TEXTS5.TEX_ID = DESIGNATIONS5.DES_TEX_ID
ORDER BY STR_TEXT, STR_TEXT2, STR_TEXT3, STR_TEXT4, STR_TEXT5 ;