Это цикл нужен вам.
На первой итерации вы запрашиваете ид потомков родителей, на каждой следующей - потомков выбранных на предыдущей. Как только выборка потомков пуста - так и останавливаете цикл.
SELECT t.*
FROM keywords t
WHERE 1=1
AND EXISTS( SELECT a.id FROM images_keywords a WHERE t.id = a.keyword_id )
AND EXISTS( SELECT b.id FROM images b WHERE b.id = t.image_id and b.space =1 )
практика - все от данных зависит. где-то надо лимитировать, где-то смысла в этом нет.
как повесить - просто запросите эту страницу с данными много-много раз