0 ? $languageId : 1; $limit = max(1, min(1000, $limit)); return TaskCertDb::fetchAll( 'SELECT p.id, COALESCE(NULLIF(v.title, ""), CONCAT("Beitrag #", p.id)) AS title FROM knowledgecenter_posts p LEFT JOIN knowledgecenter_post_versions v ON v.post_id = p.id AND v.language_id = ? AND v.version_number = ( SELECT MAX(v2.version_number) FROM knowledgecenter_post_versions v2 WHERE v2.post_id = p.id AND v2.language_id = ? ) ORDER BY p.id DESC LIMIT ' . $limit, 'ii', [$languageId, $languageId] ); } public function mapKnowledgePostTitlesByIds(int $languageId, array $postIds): array { $languageId = $languageId > 0 ? $languageId : 1; $ids = array_values(array_unique(array_filter(array_map('intval', $postIds), static fn(int $id): bool => $id > 0))); if ($ids === []) { return []; } $placeholders = implode(',', array_fill(0, count($ids), '?')); $types = 'ii' . str_repeat('i', count($ids)); $params = array_merge([$languageId, $languageId], $ids); $rows = TaskCertDb::fetchAll( 'SELECT p.id, COALESCE(NULLIF(v.title, ""), CONCAT("Beitrag #", p.id)) AS title FROM knowledgecenter_posts p LEFT JOIN knowledgecenter_post_versions v ON v.post_id = p.id AND v.language_id = ? AND v.version_number = ( SELECT MAX(v2.version_number) FROM knowledgecenter_post_versions v2 WHERE v2.post_id = p.id AND v2.language_id = ? ) WHERE p.id IN (' . $placeholders . ')', $types, $params ); $map = []; foreach ($rows as $row) { $id = (int) ($row['id'] ?? 0); if ($id <= 0) { continue; } $map[$id] = trim((string) ($row['title'] ?? ('Beitrag #' . $id))); } foreach ($ids as $id) { if (!isset($map[$id])) { $map[$id] = 'Beitrag #' . $id; } } return $map; } }