초보 개발자 mysql 쿼리 질문드립니다.
예를 들어 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개
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 | 감자깡 | 500mall_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 로 하면 해결될듯 하구요
위와같이 대상을 뽑아서 실제 대상일때
해당 구문을 수행하면 되지 않을까 싶네요
댓글을 작성하려면 로그인이 필요합니다.
디비 구조를 바꿔보시는건 힘든가요.
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개
대략적인 코드 흐름을 어떻게 하면 된다 코드를 보여주실수 있으실까요?
제가 아직 부족한 부분이 많아서요 ㅠ
댓글을 작성하려면 로그인이 필요합니다.
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개
알기 쉽게 질문해주세요.
php와 mysql 쿼리를 이용해서 한번에 처리를 하려합니다.
댓글을 작성하려면 로그인이 필요합니다.
두번째 질문
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 | 감자깡 | 500mall_id 컬럼에 mall01 값을 가진 상점의 g_barcode를 기준으로
mall_id 컬럼이 mall02값을 가진 상점에 g_barcode가 있으면
update를 하고 없으면 insert를 하려고 하거든요.
라는 질문으로 이해되는데
왜 update 또는 insert를 하는지
사전의 발생된 조건(트리거,이벤트) 가 무엇인가요?
단지 update / insert의 기준점없네요
즉, 어디를 업데이트 할것인지에 대한 대상이 누락되어있습니다.
질문을 다시올리셔서 이 문장은 삭제합니다.
댓글을 작성하려면 로그인이 필요합니다.
예를 들어 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개
이게 수정도 안되네요 ㅠ
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
php와 mysql 쿼리를 이용해서 처리하려고 합니다. 굽신굽신