prepare('select page_id, page_namespace, page_title from enwiki_p.categorylinks inner join enwiki_p.page on page_id = cl_from where cl_to = :categoryname'); $pageIds = array(); $visitedCategories = array(); function recurse(PDOStatement $statement, $catName, $recurseCount = 0) { global $pageIds, $visitedCategories; // skip already visited if(isset($visitedCategories[$catName])) return; $visitedCategories[$catName] = $catName; echo "$recurseCount : recursing into $catName" . PHP_EOL; $statement->execute(array('categoryname' => $catName)); $data = $statement->fetchAll(PDO::FETCH_ASSOC); foreach ($data as $row) { if($row['page_namespace'] == 14) { recurse($statement, $row['page_title'], $recurseCount + 1); } $pageIds[$row['page_id']] = $row['page_id']; } } recurse($statement, 'Philosophy'); echo count($pageIds);