안녕하세요, 프론트쪽 개발만 엄청 잠깐 배웠는데 갑자기 회사에서 sql+php를 하게 되었습니다.
sql 기초 문법 공부는 하고 있는데.... 테이블 자체를 수정해야 할 상황이 너무 빨리 생겨버렸네요.
h2로 테스트해봐도 계속 오류만 떨어지고 너무 막막해서 여쭤봅니다 ㅠㅠㅠ 제발 제발 제발 도와주세요 ㅠㅠ
아래 맨 처음에 보이는 것이 table 구조입니다, 36개의 컬럼으로 구성되어 있고요,
// table 구조
rid | reg_id | name | DOB | gender | email | phone | curriculum | education | major | experience | introduction
| graduation_certificate | grade_certificate | experience_certificate1 | experience_certificate2 | register_date
| register_ip | stage1_pass | stage1_pass_date | stage2_pass | stage2_pass_date | stage3_pass | stage3_pass_date
| curriculum2 | etc_document | modify_date | modify_ip | undergrad_school | undergrad_major | undergrad_status
| grad_school | grad_major | grad_status | grad_course | final_student
제가 수정해야 하는 컬럼은 stage1_pass, stage1_pass_date, stage2_pass, stage2_pass_date, stage3_pass, stage3_pass_date 입니다.
원래는 이렇게 아래 코드가 실행이 되면 각 컬럼에 값이 아래처럼 바뀌는 구조였습니다
491 $value_field = 'stage'.$stage.'_pass'; //
492 $time_field = $value_field.'_date';
493
494 $sql = '
495 UPDATE '.REG_TABLE.'
496 SET
497 '.$value_field.' = "'.$conn->escape_string($pass).'",
498 '.$time_field.' = NOW()
499 WHERE reg_id = "'.$conn->escape_string($reg_id).'"
500 ';
그런데 이번에 1단계 즉, stage1_pass에서 불합격이 되면 ("N"값) 알아서 2단계, 3단계 (stage2_pass, stage3_pass)도 불합격 값이 들어가고
pass_date도 한 번에 다 당시 시간으로 바꿔서 값을 집어 넣으라고 하시더라고요.
UPDATE '.REG_TABLE.'
// 1단계 불합격했다 -> 2,3단계 자동으로 불합격 표시 + 결정된 시간도 같이 표시
// 1단계 합격 + 2단계 불합격 -> 3단계 자동으로 불합격 표시 + 결정된 시간도 같이 표시
// 3단계만 불합격 -> 3단계에만 불합격 표시 + 결정된 시간도 같이 표시
// 3단계 합격,불합격 여부 (Y/N)을 수정하려고 함
SET '.stage3_pass.' =
// 2단계가 불합격했을 경우 (N)
CASE WHEN '.stage2_pass.' = '.N.'
// 1단계도 불합격했는지 다시 확인하고
THEN CASE WHEN '.stage1_pass.' = '.N.'
// 그렇다면 3단계도 확실히 불합격 값으로 채움
THEN '.N.'
// *** 그리고 이때! 합격, 불합격 여부 결정난 time도 다시 now()로 하고 싶다
// 기타 경우에는 3단계 원래 값 그대로 가지고 있어라
ELSE '.stage3_pass.' END,
// 2단계 합격, 불합격 여부 수정
SET '.stage2_pass.' =
// 1단계 불합격했다면
CASE WHEN '.stage1_pass.' = '.N.'
// 2단계는 불합격 값으로 채움
THEN '.N.'
// ** 그런데 이때 3단계도 자동으로 불합격 값으로 채워야 하는데 어떻게 중첩하지?
// ** 2,3단계 중첩해서 다 불합격 채우고 나서 time도 다시 now()
ELSE '.stage2_pass.' END,
WHERE reg_id = "'.$conn->escape_string($reg_id).'"
여기까지 짠 상황인데요, 주석 다 빼도 h2.sh에서 테스트해볼 때 계속 오류만 납니다,
invalid하다고 하는데 어디가 문제인지 못 찾고 있습니다 ㅠㅠ
1. stage3_pass를 업데이트할 때 time도 set을 해야 할텐데.... set 안에 set이 들어갈 수 있나요?
2. stage2_pass를 업데이트할 때 stage3도 또 set하고, time도 set해야 한다고 생각했는데.. 그러면 set이 3번이나 중첩되는데요, 가능한가요? ㅠㅠ
CASE문이 아니라 if문으로 해야 하는 것인지......
어떤 힌트, 조언이라도 주신다면 정말 감사하겠습니다!!!!! ㅠㅠㅠ
<style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #ffffff; background-color: #000000} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #ecec15; background-color: #000000} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #28f0ef; background-color: #000000} p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #ff3cff; background-color: #000000} span.s1 {font-variant-ligatures: no-common-ligatures; color: #6ce2ff} span.s2 {font-variant-ligatures: no-common-ligatures} span.s3 {font-variant-ligatures: no-common-ligatures; color: #ffdddd} span.s4 {font-variant-ligatures: no-common-ligatures; color: #ecec15} span.s5 {font-variant-ligatures: no-common-ligatures; color: #28f0ef} span.s6 {font-variant-ligatures: no-common-ligatures; color: #8cffb4} span.s7 {font-variant-ligatures: no-common-ligatures; color: #ffffff} span.s8 {font-variant-ligatures: no-common-ligatures; color: #ff3cff} </style><style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #ffffff; background-color: #000000} p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #ecec15; background-color: #000000} p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #28f0ef; background-color: #000000} p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #ff3cff; background-color: #000000} span.s1 {font-variant-ligatures: no-common-ligatures; color: #6ce2ff} span.s2 {font-variant-ligatures: no-common-ligatures} span.s3 {font-variant-ligatures: no-common-ligatures; color: #ffdddd} span.s4 {font-variant-ligatures: no-common-ligatures; color: #ecec15} span.s5 {font-variant-ligatures: no-common-ligatures; color: #28f0ef} span.s6 {font-variant-ligatures: no-common-ligatures; color: #8cffb4} span.s7 {font-variant-ligatures: no-common-ligatures; color: #ffffff} span.s8 {font-variant-ligatures: no-common-ligatures; color: #ff3cff} </style>
Comment 4
-
건우아빠
2017.05.25 23:47
-
디알못
2017.05.28 00:36
그런 방법이 있군요 ㅠㅠㅠㅠ 더 찾아보겠습니다 ㅠㅠ 감사합니다
-
쿵쿵이
2017.05.26 11:58
update REG_TABLE set stage1_pass='값' where reg_id = "'.$conn->escape_string($reg_id).'"
if(select stage1_pass from reg_table WHERE reg_id = "'.$conn->escape_string($reg_id).'" = 'N')
begin
update reg_table
set stage2_pass = 'N', stage3_pass = 'N'
WHERE reg_id = "'.$conn->escape_string($reg_id).'"
end
-
디알못
2017.05.28 00:36
헛 이렇게 친절하게... ㅠㅠㅠ 감사합니다 ㅠㅠㅠ..!!
update procedure를 만들고
프로시저안에서 아규값만 받은 다음 처리하시는게 어떨지요....