상품순서 순차적으로 일괄변경

상품순서 순차적으로 일괄변경

QA

상품순서 순차적으로 일괄변경

답변 3

본문

안녕하세요. 항상 도움주셔서 감사합니다.

상품을을 최신꺼부터 올려서 최신께 가장 뒤에있는데 순서를 변경하려고 하는데 상품순서가 ㅁ낳아서요 

 

g5_shop_item 테이블에

it_order 부분을 순차적으로 변경하면 될거같은데

저는 한번에 변경하는 명령어만 알아서요 ㅠ
혹시이걸

 

특정부분에서 ~ 특정부분까지

1 , 2 , 3 , 4 , 5 이런식으로 순차적으로 적용되게 명령어를 못할까요?

 

update g5_shop_item set it_order = 1 where it_id > 71489; 

이런식인데 이건 모두 1로 바꾸는거라서요 ㅠ

이 질문에 댓글 쓰기 :

답변 3


DROP TABLE IF EXISTS `zoo2`;
CREATE TABLE IF NOT EXISTS `zoo2` (
  `it_id` int(11) NOT NULL AUTO_INCREMENT,
  `it_order` int(11) NOT NULL,
  PRIMARY KEY (`it_id`),
  KEY `it_order` (`it_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `zoo2` VALUES (1, 0);
INSERT INTO `zoo2` VALUES (2, 0);
INSERT INTO `zoo2` VALUES (3, 0);
INSERT INTO `zoo2` VALUES (4, 0);
INSERT INTO `zoo2` VALUES (5, 0);
INSERT INTO `zoo2` VALUES (71490, 0);
INSERT INTO `zoo2` VALUES (71491, 0);
INSERT INTO `zoo2` VALUES (71492, 0);
INSERT INTO `zoo2` VALUES (71493, 0);
INSERT INTO `zoo2` VALUES (71494, 0);
INSERT INTO `zoo2` VALUES (71495, 0);
INSERT INTO `zoo2` VALUES (71496, 0);
INSERT INTO `zoo2` VALUES (71497, 0);
INSERT INTO `zoo2` VALUES (71498, 0);
INSERT INTO `zoo2` VALUES (71499, 0);
INSERT INTO `zoo2` VALUES (71500, 0);

 

단순하게 하면 

where 절의 it_id + 1 하면 되는데

it_id가 순차가 아닐때 중간에 이빨이 빠지므로


UPDATE `zoo2` SET it_order = (it_id - 71490 + 1) WHERE it_id >= 71490;

 

서브쿼리를 사용해봤더니

업데이트가 반영된 max를 못 뽑아옵니다


UPDATE `zoo2` SET it_order = (SELECT * FROM (SELECT MAX(it_order) FROM `zoo2` WHERE it_id >= 71490) AS t) + 1 WHERE it_id >= 71490;

 

그래서 순차값을 입력하기 위해


SELECT :=0;
UPDATE `zoo2` SET it_order = :=+1 WHERE it_id >= 71490;

 

그런데,
영카트 상품테이블 it_id type이 varchar 라는 점
it_order가 같고 따로 order by 하지 않으면 primary key인 it_id 로 정렬된다는 점
(it_order를 상품테이블의 max(it_order) + 1 로 동일하게 해도 다음 정렬은 it_id 되므로 71490 이후의 상품을 동일하게 해도 무방)
https://github.com/gnuboard/youngcart5/blob/5.4.5.1/lib/shop.lib.php#L63

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 193
© SIRSOFT
현재 페이지 제일 처음으로