Его немного сложно, проверьте, работает ли он для вас
select a.id,if(a.parent = 0,@varw:=concat(a.id,','),@varw:=concat(a.id,',',@varw)) as list from (select * from recursivejoin order by if(parent=0,id,parent) asc) a left join recursivejoin b on (a.id = b.parent),(select @varw:='') as c having list like '%19,%';
Ссылка на скрипт SQL http://www.sqlfiddle.com/#!2/e3cdf/2
Замените имя поля и таблицы соответствующим образом.
После расследования это оказалось моей смущающей ошибкой: у пользователя root на этом сервере есть ограничение на максимальное количество открытых файлов 1024, которое неожиданно мало (но я слышал, что это Ubuntu по умолчанию). Когда в серверной программе слишком много открытых сокетов, некоторая часть системы начинает отклонять одноранговые узлы, делая их статус «неактивным». Фактические «индексы»:
indices = let index = getStdRandom $ randomR (0, M.size active - 1) in
sequence $ replicate (n * 2) index
Извините, если этот вопрос вызывает какие-либо проблемы или путаницу. Я постараюсь опубликовать более осторожно в следующий раз.