Arhat109,
ну, прежде, проблема в моих небольших знаниях в мускуле - я не знаю условных обозначений, например ":=" и "@", даже не знаю - куда записать процедуру, приведенную Вами как пример. Обычно я все делаю в РНР скрипте, но это можно прочитать (или догадаться :) )
А вот конкретнее:
SET @C='Ver.2: table must composed primary key (level, parent_id, id)... quickly, full index scan...';
SELECT
ch.`level` AS LEVEL
, IF( @pr<>ch.`parent_id`, GREATEST(
@array:=REPLACE(@array, @prc, '')
, @prc:=CONCAT(',',ch.`parent_id`,',')
, @pr:=ch.`parent_id`
), @pr) AS parent
, GREATEST(ch.`id`
, IF( LOCATE(@prc, @array) > 0
, @array := CONCAT(@array, CONCAT(',',ch.`id`,','))
, ''
)) AS childs
FROM (SELECT @prc:=@array:=CONCAT(',',@pr:=search_num,',')) AS dummy
, `tree` AS ch FORCE INDEX (`PRIMARY`) # if present other index!
WHERE LOCATE( CONCAT(',',ch.`parent_id`,','), @array) > 0;
# selected=300 items by 0.21 .. 0.8 sec.
1) как формировать level для таблицы партнерской программы, когда люди в разные места структуры добавляются не систематично? Вообще, для таких условия построения структуры - подходит ли эта процедура?
2) как в запросе задать глубину требуемой части дерева?
3) возможно ли таким подходом делать подсчеты?
4) возможно ли это использовать для INSERT по определенным правилам?
Спасибо за внимание! (к нашим проблемам)