게시판쪽을 만지다가, DB INSERT관련 질문드립니다. 이거 짜주시면 정말 고수십니다ㅠㅠ
본문
안녕하세요 얼마전 워프에서 넘어와서 그누보드로 이것저것 옮길수있는걸 옮기고있는데요
단순 인서트나 업데이트는 나름 쉬워서 기존에 옮길것들 커스터마이징을 잘하고 있었는데
이부분에서 막힙니다ㅠㅠ
만약 qa_type이 1이 아닌거중에서, 이전최근 qa_num에서 -1을 하여 인서트를 하려고합니다.
qa_id | qa_num | qa_parent | qa_type |
4 | -3 | 4 | 0 |
5 | -4 | 5 | 0 |
6 | -4 | 5 | 1 |
7 | -1 | 1 | 1 |
즉 위에 7번쪽을 보면, qa_type이 1이고 그위도 1이니,
qa_id=5에 값중 qa_num값-1을 하여 인서트를 하려고합니다.
즉 그다음인서트값을
qa_id값은 바로이전꺼 +1 ==8
qa_num값은 qa_type이 1이 아닌것중 최근값-1 ==-5
qa_parent값은 바로 이전꺼 +1 == 8
qa_type값은 무조건0으로 인서트 == 0
즉 그 다음값은
8 , -5, 8, 0 으로 인서트가 되면되는데
셀렉트하여 인서트는 할수있겠는데
php처럼 if조건문이 있는것두 아니구 어떤식으로 표현해야할지ㅠㅠ
혹시 위를 해결할 간단하게 sql소스를 짜주실수있을까요?ㅠㅠ
정말 이거 짜주시는분은, 개발고수, 상위개발자급입니다.
답변 1
일단 테이블명을 tmp_test라고 가정하고
SET @num:= 0;
SELECT
a.qa_id,
if (@num = 0, @num:= a.qa_num,@num := @num -1) nums,
a.qa_num,
a.qa_parent,
a.qa_type
FROM tmp_test a
ORDER by qa_id desc
로 구현하면
확인가능하구요
insert into table
select 하시면
전부 insert 가능합니다.
새로 집어넣을 테이블을 tmp_test_copy 라고 하고
SET @num:= 0;
INSERT INTO tmp_test_copy
SELECT a.qa_id, if (@num = 0, @num:= a.qa_num,@num := @num -1) nums, a.qa_parent, a.qa_type
FROM tmp_test a
ORDER by qa_id DESC