테스트 사이트 - 개발 중인 베타 버전입니다

초보 개발자 mysql 쿼리 질문드립니다.

소희짱 7년 전 조회 4,793

예를 들어 mall_goods 란 테이블이 있다고 하고요.

mall_goodls 테이블이 다음과 같은 구조라고 가정하면요.

idx | mall_id  |  g_barcode | g_name | g_price
5  |  mall01 | 575835    | 감자깡    |  900
4  |  mall02 | 575811    | 새우깡    |  1500
3  |  mall01 | 575857    | 고구마깡 |  800
2  |  mall01 | 575843    | 양파깡    |  700
1  |  mall02 | 575835    | 감자깡    |  500 

mall_id 컬럼에 mall01 값을 가진 상점의 g_number를 기준으로 mall02값을 가진 상점에 g_number가 있으면 updatef를 하고 없으면 insert를 하려고 하거든요.
일주일째 헤매고 있는데 도저히 답이 안나와 질문드립니다. ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변 7개

플래토
7년 전

mall_goodls 테이블이 다음과 같은 구조라고 가정하면요.

idx | mall_id  |  g_barcode | g_name | g_price
5  |  mall01 | 575835    | 감자깡    |  900
4  |  mall02 | 575811    | 새우깡    |  1500
3  |  mall01 | 575857    | 고구마깡 |  800
2  |  mall01 | 575843    | 양파깡    |  700
1  |  mall02 | 575835    | 감자깡    |  500 

mall_id 컬럼에 mall01 값을 가진 상점의 g_barcode를 기준으로

mall_id 컬럼이 mall02값을 가진 상점에 g_barcode가 있으면

      mall_id 컬럼의 값이 mall01인 Record의  g_name, g_price를

      mall_id 컬럼이 mall02의 Record에  g_name, g_price에 update를 하고

g_barcode값이 없으면
       mall_id값이 mall01값을 가진 레코드를

       mall_id의 값은 mall02로해서 동일 Record을
        insert를 하려고 하거든요.

 

 

질문의 구분을 위해서 들여쓰기를 했습니다.

 

1. mall_id 컬럼의 mall01의 대상으로

    mall_id 컬럼이 존재하는지 여부

 

2. update 대상인 insert 대상인지 판단

두가지 기준으로

표기해봤습니다.

 

</p>

<p>

select 'update' type, b.* from mall_goodls  a, mall_goodls  b

where (1)

and a.mall_id = 'mall01'

and b.mall_id = 'mall02'

and b.g_barcode = a.g_barcode

and a.idx <> b.idx

union all 

select 'insert' type, (select max(idx)+1 from mall_goodls ) idx, 

                       'mall02' mall_id, a.g_barcode, a.g_name, a.g_price

                               from mall_goodls  a, mall_goodls  b

where (1)

and a.mall_id = 'mall01'

and b.mall_id = 'mall02'

and b.g_barcode <> a.g_barcode

and a.idx <> b.idx

 </p>

<p>

 

쿼리를 이런 패턴으로해서 

idx 는 일단 max+1로 했으나

auto_increment 로 하면 해결될듯 하구요

 

위와같이 대상을 뽑아서 실제 대상일때

해당 구문을 수행하면 되지 않을까 싶네요

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

프라푸치노K

디비 구조를 바꿔보시는건 힘든가요.

idx | mall_id  |  g_barcode
5  |  mall01 | 575835
4  |  mall02 | 575811
3  |  mall01 | 575857
2  |  mall01 | 575843
1  |  mall02 | 575835

 

g_barcode | g_name | g_price
575835    | 감자깡    |  900
575811    | 새우깡    |  1500
575857    | 고구마깡 |  800
575843    | 양파깡    |  700

 

두테이블은 join을 사용하고 두번째 테이블의 바코드 기준으로 업데이트만 하면됩니다.

 

이게 안된다면 sql query로만 해결해야 하는건지 php코드를 써도 되는건지에따라 달라집니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

소희짱
7년 전
네. 지금 이렇게 운영이 되고 있어서 구조를 변경하는건 힘들고요. ㅠ
php와 mysql 쿼리를 이용해서 처리하려고 합니다. 굽신굽신
휴란드
7년 전
mall01 select 후 while 돌려서 mall02 select 후 같은 코드가 있다면 update 아니라면 insert하시면 될거같아요
소희짱
7년 전
감사합니다. 휴란드님.
대략적인 코드 흐름을 어떻게 하면 된다 코드를 보여주실수 있으실까요?
제가 아직 부족한 부분이 많아서요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

잉끼s
7년 전

mall_id와 g_barcode를 유니크로 설정하시고요.

alter table tablename add unique key uinq(mall_id, g_barcode)

 

 

INSERT INTO tablename (mall_id, g_barcode, g_name, g_price) VALUES ('mall01', '575835', '감자깡', 900)  
ON DUPLICATE KEY UPDATE g_name = '감자깡', g_price = 900

이런 식으로 쿼리 작성하시면 됩니다.

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

소희짱
7년 전
한번에 셀렉트를 해서 값을 넣어서 처리를 할려고 하거든요.
잉끼s
7년 전
한번에 셀렉트해서 값을 넣는다는게 무슨 말씀인지 모르겠습니다.
알기 쉽게 질문해주세요.
소희짱
7년 전
저렇게 하나의 값만 입력하는게 아니고요.
php와 mysql 쿼리를 이용해서 한번에 처리를 하려합니다.

댓글을 작성하려면 로그인이 필요합니다.

플래토
7년 전

두번째 질문

g_number => g_barcode  로 인식하면

 

mall_goodls 테이블이 다음과 같은 구조라고 가정하면요.

idx | mall_id  |  g_barcode | g_name | g_price
5  |  mall01 | 575835    | 감자깡    |  900
4  |  mall02 | 575811    | 새우깡    |  1500
3  |  mall01 | 575857    | 고구마깡 |  800
2  |  mall01 | 575843    | 양파깡    |  700
1  |  mall02 | 575835    | 감자깡    |  500 

mall_id 컬럼에 mall01 값을 가진 상점의 g_barcode를 기준으로

mall_id 컬럼이 mall02값을 가진 상점에 g_barcode가 있으면

update를 하고 없으면 insert를 하려고 하거든요.

 

라는 질문으로 이해되는데

 

왜 update 또는 insert를 하는지

 

사전의 발생된 조건(트리거,이벤트) 가 무엇인가요?

 

단지  update /  insert의 기준점없네요

즉, 어디를 업데이트 할것인지에 대한 대상이 누락되어있습니다.

 

질문을 다시올리셔서 이 문장은 삭제합니다.

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

M
7년 전

예를 들어 mall_goods 란 테이블이 있다고 하고요.

mall_goodls 테이블이 다음과 같은 구조라고 가정하면요.

idx | mall_id  |  g_barcode | g_name | g_price
5  |  mall01 | 575835    | 감자깡    |  900
4  |  mall02 | 575811    | 새우깡    |  1500
3  |  mall01 | 575857    | 고구마깡 |  800
2  |  mall01 | 575843    | 양파깡    |  700
1  |  mall02 | 575835    | 감자깡    |  500 

mall_id 컬럼에 mall01 값을 가진 상점의 g_barcode를 기준으로 mall02값을 가진 상점에 g_barcode가 있으면 mall01값을 가진 상점의 g_name, g_price를 mall02의 g_name, g_price에 update를 하고 없으면 mall01값을 가진 레코드를 mall_id의 값을 mall02로해서 모든값을 insert를 하려고 하거든요.
일주일째 헤매고 있는데 도저히 답이 안나와 질문드립니다. ㅠㅠ

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

질문의 요지를 잘모르게네요 프래토님이 말한대로 저게 있는 지도 모르게고 전체 필드 내용이 있어야 

대답 가능 할듯합니다

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

소희짱
7년 전
애공 g_number 이 아니고 g_barcode 네요. ~
이게 수정도 안되네요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

플래토
7년 전

문제는 g_number가 어디에 존재하나요?

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

소희짱
7년 전
애공 g_number 이 아니고 g_barcode 네요. ~
이게 수정도 안되네요 ㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인