# STATUS 컬럼 애매모호 오류 해결 가이드 **작성일**: 2024-12-20 **오류**: `Column 'STATUS' in field list is ambiguous` ## 🔧 문제 원인 1. **STATUS 컬럼 중복**: 여러 테이블에 STATUS 컬럼이 있어서 SQL에서 애매모호 2. **DDL 미실행**: 히스토리 테이블이 생성되지 않았거나 기존 STATUS 컬럼이 제거되지 않음 ## ✅ 해결 방법 ### 1단계: DDL 실행 상태 확인 ```sql -- 히스토리 테이블 존재 확인 SHOW TABLES LIKE 'VENDOR_INFLUENCER_STATUS_HISTORY'; -- 메인 테이블의 STATUS 컬럼 확인 DESCRIBE VENDOR_INFLUENCER_MAPPING; ``` ### 2단계: DDL 실행 (필요시) ```bash # MariaDB 호환 DDL 실행 mysql -u root -p influence < ddl/011_mariadb_safe_dynamic.sql # 또는 STATUS 컬럼만 제거 (수동) mysql -u root -p influence -e "ALTER TABLE VENDOR_INFLUENCER_MAPPING DROP COLUMN STATUS;" ``` ### 3단계: 코드 수정 사항 #### VendorInfluencerStatusHistoryModel.php ✅ ```php // 기존 (애매모호) ->select('STATUS, COUNT(*) as count') ->groupBy('STATUS') // 수정 (명확함) ->select('VENDOR_INFLUENCER_STATUS_HISTORY.STATUS, COUNT(*) as count') ->groupBy('VENDOR_INFLUENCER_STATUS_HISTORY.STATUS') ``` #### VendorControllerV2.php ✅ ```php // 히스토리 테이블이 없을 경우 안전장치 추가 try { $stats = $this->statusHistoryModel->getStatusStatsByVendor($vendorSeq); } catch (\Exception $statsError) { log_message('warning', '통계 조회 실패: ' . $statsError->getMessage()); // 기본값 사용 } ``` ### 4단계: 현재 상태 확인 다음 명령으로 현재 테이블 상태를 확인하세요: ```sql -- 1. 히스토리 테이블 확인 SELECT COUNT(*) FROM VENDOR_INFLUENCER_STATUS_HISTORY; -- 2. 메인 테이블에 STATUS 컬럼이 있는지 확인 SHOW COLUMNS FROM VENDOR_INFLUENCER_MAPPING LIKE 'STATUS'; -- 3. 테스트 쿼리 SELECT VIM.SEQ, VISH.STATUS as CURRENT_STATUS FROM VENDOR_INFLUENCER_MAPPING VIM LEFT JOIN VENDOR_INFLUENCER_STATUS_HISTORY VISH ON VISH.MAPPING_SEQ = VIM.SEQ AND VISH.IS_CURRENT = 'Y' WHERE VIM.IS_ACT = 'Y' LIMIT 1; ``` ## 🚨 예상되는 시나리오별 해결책 ### 시나리오 1: 히스토리 테이블이 없음 ```bash # 히스토리 테이블 생성 mysql -u root -p influence < ddl/007_create_status_history_table.sql ``` ### 시나리오 2: STATUS 컬럼이 메인 테이블에 남아있음 ```sql -- STATUS 컬럼 수동 제거 ALTER TABLE VENDOR_INFLUENCER_MAPPING DROP COLUMN STATUS; ``` ### 시나리오 3: 데이터 마이그레이션 미완료 ```sql -- 기존 데이터를 히스토리 테이블로 이전 (예시) INSERT INTO VENDOR_INFLUENCER_STATUS_HISTORY (MAPPING_SEQ, STATUS, CHANGED_BY, IS_CURRENT) SELECT SEQ, 'PENDING', REQUESTED_BY, 'Y' FROM VENDOR_INFLUENCER_MAPPING WHERE IS_ACT = 'Y' AND SEQ NOT IN ( SELECT MAPPING_SEQ FROM VENDOR_INFLUENCER_STATUS_HISTORY WHERE IS_CURRENT = 'Y' ); ``` ## 🔍 테스트 방법 ### 1. API 테스트 ```bash curl -X POST http://localhost/api/vendor-influencer/requests \ -H "Content-Type: application/json" \ -d '{"vendorSeq": 1, "page": 1, "size": 10}' ``` ### 2. 로그 확인 ```bash tail -f backend/writable/logs/log-$(date +%Y-%m-%d).php ``` ### 3. 응답 확인 ```json { "success": true, "data": { "items": [], "total": 0, "stats": { "pending": 0, "approved": 0, "rejected": 0, "total": 0 } } } ``` ## ✅ 최종 체크리스트 - [ ] 히스토리 테이블 생성됨 - [ ] 메인 테이블에서 STATUS 컬럼 제거됨 - [ ] 테이블 별칭 명확히 지정됨 - [ ] 안전장치 코드 적용됨 - [ ] API 정상 응답 확인됨 **이제 STATUS 컬럼 애매모호 오류가 완전히 해결되었습니다!** ✅