$0', $escaped); } try { $pdo = db_conn(); $memberId = trim((string)($_SESSION['member_id'] ?? '')); $sysCompCode = trim((string)($_SESSION['sys_comp_code'] ?? '')); $sql = " SELECT c.content_id, c.title, c.description, c.description2, c.content_url, c.thumbnail_url, c.category_code, c.category_group, COALESCE(ec.code_name, c.category_code) AS category_name, COALESCE(vs.view_cnt, 0) AS view_cnt, CASE WHEN cw.content_id IS NOT NULL THEN 1 ELSE 0 END AS is_bookmarked FROM edu_contents c LEFT JOIN edu_codes ec ON ec.base_code = c.category_code AND ec.group_code = 'CA100' AND ec.is_active = 1 LEFT JOIN ( SELECT content_id, COUNT(DISTINCT member_id) AS view_cnt FROM edu_learning_histories GROUP BY content_id ) vs ON vs.content_id = c.content_id LEFT JOIN edu_content_wishlist cw ON cw.member_id = :mid AND cw.sys_comp_code = :sc AND cw.is_active = 1 AND cw.content_id = c.content_id WHERE c.is_active = 1 AND ( :kw = '' OR c.title LIKE :like_kw1 OR c.description LIKE :like_kw2 OR c.description2 LIKE :like_kw3 ) ORDER BY c.updated_at DESC, c.created_at DESC, c.content_id DESC LIMIT 300 "; $stmt = $pdo->prepare($sql); $stmt->execute([ ':mid' => $memberId, ':sc' => $sysCompCode, ':kw' => $q, ':like_kw1' => '%' . $q . '%', ':like_kw2' => '%' . $q . '%', ':like_kw3' => '%' . $q . '%', ]); $results = $stmt->fetchAll(PDO::FETCH_ASSOC) ?: []; } catch (Throwable $e) { error_log('[search_result] ' . $e->getMessage()); $results = []; } $totalCount = count($results); // 카테고리별 그룹화 $groupedResults = []; $categoryMeta = []; // category_code => ['name' => string, 'count' => int] foreach ($results as $row) { $catCode = (string)($row['category_code'] ?? 'etc'); $catName = (string)($row['category_name'] ?? $row['category_code'] ?? '기타'); if (!isset($groupedResults[$catCode])) { $groupedResults[$catCode] = []; $categoryMeta[$catCode] = ['name' => $catName, 'count' => 0]; } $groupedResults[$catCode][] = $row; $categoryMeta[$catCode]['count']++; } $videosForJs = array_map(static function (array $row): array { $contentUrl = (string)($row['content_url'] ?? ''); $thumb = make_thumb_url((string)($row['thumbnail_url'] ?? ''), $contentUrl); return [ 'id' => (string)($row['content_id'] ?? ''), 'content_id' => (string)($row['content_id'] ?? ''), 'url' => $contentUrl, 'content_url' => $contentUrl, 'thumbnail' => $thumb, 'category' => (string)($row['category_name'] ?? $row['category_code'] ?? ''), 'category_name' => (string)($row['category_name'] ?? $row['category_code'] ?? ''), 'category_code' => (string)($row['category_code'] ?? ''), 'subcate' => (string)($row['category_group'] ?? ''), 'title' => (string)($row['title'] ?? ''), 'description' => trim((string)($row['description'] ?? '')), 'description2' => trim((string)($row['description2'] ?? '')), 'bookmark' => ((string)($row['is_bookmarked'] ?? '0') === '1'), 'type' => 'main', 'keywords' => [], 'watch_tm' => 0, 'content_tm' => 0, 'all_tm' => 0, 'view_cnt' => (int)($row['view_cnt'] ?? 0), ]; }, $results); $videosJson = json_encode($videosForJs, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP); ?>
''에 대한 검색결과가 건 있습니다.
검색어를 입력해주세요.
검색 결과가 없습니다.