2012-12-12 2 views
0

나는 초심자 프로그래머이고 올바르게 작동하는 형식으로 다음 코드를 작성할 수있는 방법이 있는지 궁금합니다. (나는 항상 구문을 망치는 것 같다.)IF가 존재합니까?

$query2 = mysql_query("SELECT IF EXISTS EmployeeName, EmployeeNumber, Position, 
ManagementTraining1, ManagementTraining2, ManagementTraining3, ManagementTraining4, 
ManagementTraining5, ManagementTraining6, ManagementTraining7 FROM 
managementMeetingAttendance ORDER BY EmployeeNumber") or die(mysql_error()); 

나는 동적으로 생성 된 테이블의 데이터를 수집하고 궁금하네요 유사한가 있다면 열을 위해 할 수있는 문을 '존재하는 경우'그 수도 있고 존재하지 않을 수도 있습니다.

도움이 될 것입니다. 감사합니다.

+1

열을 알고 계십니까? –

+6

오, 그건 정규화 된 데이터베이스 스키마가 아닙니다. 나는 그 사람에게 불을 지르고 다시 시작했다. "동적으로 생성 된 테이블"? 더 많은 문제가있는 것 같습니다. – duffymo

+1

데이터를보다 잘 정리하려면 [데이터베이스 정규화] (http://en.wikipedia.org/wiki/Database_normalization)를 살펴보십시오. 열은 동적으로 추가되거나 삭제되어서는 안됩니다. 그것은 주요 코드 냄새입니다. 그리고 그렇게 할 수 없다면 고정 된 컬럼 세트를 가지고 누락 된 데이터가있는 컬럼에 NULL을 삽입하십시오. –

답변

0

아니, 거기가 아니라 먼저 열 이름에 대한 데이터베이스 조회 할 수 있습니다 내가 MySQL의 사람이 아니지만, 내가 문 당신 '의 의도를 확실 해요

select column_name from information_schema.columns where table_name=<TABLE> 
+1

개인적으로 다른 솔루션을 먼저 들여다 보겠다. 더 나은 스키마 디자인 포함 –

0

을 글을 쓰고 의도에 따라 효과적인 대답이 될 수 있습니다.

당신이있어 :

SELECT IF EXISTS EmployeeName, EmployeeNumber, Position, 
ManagementTraining1, ManagementTraining2, ManagementTraining3, ManagementTraining4, 
ManagementTraining5, ManagementTraining6, ManagementTraining7 FROM 
managementMeetingAttendance ORDER BY EmployeeNumber 

때문에 당신이 더 where 절, 당신은 아마도 특정 레코드를 찾고하지 않는, 그리고의 사용이 "존재"당신은 단순히 문의하는 것 같다 테이블 managementMeetingAttendance 여부 적어도 하나의 레코드를 포함하고 있으므로 열리스트와 순서 별 명령문은 부적합합니다.

((SELECT Count(*) FROM managementMeetingAttendance) > 0) 

테이블에 행이 포함되어 있으면 true, 그렇지 않으면 false

당신이 테이블에 수행 또는 나열된 각 컬럼을 포함하지 않는 여부를 결정해야하지만, 다음이 이전의 대답으로 당

좀 더 복잡한 경우, 당신이 INFORMATION_SCHEMA.COLUMNS를 사용해야 할 것 테이블에 대한 열을 가져온 다음이 데이터를 쿼리하십시오.

IF EXISTS select 1 from (
    SELECT Column_Name FROM information_schema.columns 
    WHERE table_name = 'managementMeetingAttendance' AND column_name = 'EmployeeName' 
) eName AND EXISTS select 1 from (
    SELECT Column_Name FROM information_schema.columns 
    WHERE table_name = 'managementMeetingAttendance' AND column_name = 'EmployeeNumber' 
) eNum AND EXISTS select 1 from (
    SELECT Column_Name FROM information_schema.columns 
    WHERE table_name = 'managementMeetingAttendance' AND column_name = 'Position' 
) ePos AND EXISTS select 1 from (
    SELECT Column_Name FROM information_schema.columns 
    WHERE table_name = 'managementMeetingAttendance' AND column_name 
     = 'ManagementTraining1' 
) eTrng1 AND EXISTS select 1 from (
    etc