테이블 값을 복사하려고 하는데 index값에 따라 변하게 할수 있을까요?
본문
이벤트가 저장되어 있는 테이블이 있고
위에처럼 각 이벤트의 상품정보는 따로 저장되어 있습니다.
상품정보가 단계별로 저장되어 있어 상위단계가 있는 경우,
상위상품의 idx값을 parent에 저장한다고 할때,
이벤트 복사기능을 만들려고 하는데,
이벤트 데이터는 구현했는데
그에 따른 상품정보는 복사하는데 어려움이 있네요.
처음엔
INSERT INTO another_table (column1, column2, column3)
SELECT column1, column2, column3 FROM your_table WHERE your_condition;
이런식으로 했는데, 문제가 복사는 잘 되는데 새로운 idx 값에 따라 parent 값이
바뀌어야 하는데 바뀌지가 않네요.
무슨 방법이 없을까요?
역시 insert 를 한다음에 update를 해야 겠죠?
조언 부탁드립니다.
!-->답변 2
- Version
SELECT VERSION() FROM DUAL;
/*
+------------+
| VERSION() |
+------------+
| 5.7.32-log |
+------------+
*/
- DDL
CREATE TABLE another_table(
idx int(11) not null auto_increment,
parent int(11) not null default 0,
product varchar(255) not null,
PRIMARY KEY(idx)
);
- DML
INSERT INTO another_table (parent, product) VALUES (0, '상품1'), (0, '상품2');
/*
+-----+--------+-----------+
| idx | parent | product |
+-----+--------+-----------+
| 1 | 0 | 상품1 |
| 2 | 0 | 상품2 |
+-----+--------+-----------+
*/
SET @parent = 1;
INSERT INTO another_table (parent, product)
SELECT
idx parent,
CONCAT(
product,
'-',
(SELECT COUNT(1) + 1 FROM another_table WHERE parent = @parent)
) product
FROM another_table
WHERE idx = @parent;
/*
+-----+--------+-----------+
| idx | parent | product |
+-----+--------+-----------+
| 1 | 0 | 상품1 |
| 2 | 0 | 상품2 |
| 3 | 1 | 상품1-1 |
+-----+--------+-----------+
*/
SET @parent = 1;
INSERT INTO ...
/*
+-----+--------+-----------+
| idx | parent | product |
+-----+--------+-----------+
| 1 | 0 | 상품1 |
| 2 | 0 | 상품2 |
| 3 | 1 | 상품1-1 |
| 4 | 1 | 상품1-2 |
+-----+--------+-----------+
*/
SET @parent = 3;
INSERT INTO ...
/*
+-----+--------+-------------+
| idx | parent | product |
+-----+--------+-------------+
| 1 | 0 | 상품1 |
| 2 | 0 | 상품2 |
| 3 | 1 | 상품1-1 |
| 4 | 1 | 상품1-2 |
| 5 | 3 | 상품1-1-1 |
+-----+--------+-------------+
*/
idx값을 가져오는건 sql_insert_id 함수로 해당 insert한 값을 가져와 업데이트 하셔야 합니다.
참고로 insert 처리후에 $idx = sql_insert_id();
이걸로 최근에 저장된 idx값을 가져올수 있습니다.
답변을 작성하시기 전에 로그인 해주세요.