안녕하세요.
이리저리 방법을 찾아보고 체크해봐도 어떤부분이 문제인지 몰라 질문좀드립니다.
쇼핑몰을 현재 개발중인데요.
실시간 무통장입금서비스를 연동중에 있습니다.
실시간으로 입금된 금액들을 조회해서 db에 인서트한후 주문내역과 실시간으로 입금된 금액, 입금자, 계좌번호등을 매칭시켜
일치하는 부분에 대해서는 주문번호를 업데이트 시켜주는 매칭작업을 하고있는데요.
실질적으로 값을 비교할 필드는 위에서 말씀드렸던 금액, 입금자, 계좌번호 밖에 없습니다.
주문내역 테이블/필드 : ordertbl, actnum(계좌번호), price(금액), payname(입금자)
실시간조회테이블 테이블/필드 : banktbl, actnumber(계좌번호), bprice(금액), baccname(입금자)
위정보를 바탕으로 루프를 돌리면
SELECT COUNT(C.price) AS price_cnt
, COUNT(A.payname) AS name_cnt
FROM banktbl as A
LEFT OUTER JOIN ordertbl C
ON A.actnumber = C.actnum
AND A.baccname = C.payname
AND A.bprice = C.price
WHERE A.actnumber = '1111122233333'
AND A.baccname = '홍길동'
AND A.bprice = '1000'
SELECT COUNT(C.price) AS price_cnt
, COUNT(A.payname) AS name_cnt
FROM banktbl as A
LEFT OUTER JOIN ordertbl C
ON A.actnumber = C.actnum
AND A.baccname = C.payname
AND A.bprice = C.price
WHERE A.actnumber = '1111122233333'
AND A.baccname = '홍길동'
AND A.bprice = '1000'
위 데이터처럼 노출이 되는데요.
실질적으로 실시간으로 금액을 입금한 사람은 홍길동입니다.
그런데 한번만 입금했으면 다행이지만 실수로 2번을 입금했을경우 비매칭처리가 되어야하는데요.
카운팅이 제가 원하는대로 되질 않네요.
제가 실수를 한것같은데 어느부분에서 잘못되었는지 알수가 없어 조언좀 부탁드립니다.
정신이 없다보니 질문도 횡설수설합니다. ㅡㅡ
답변감사합니다.
말씀대로 쿼리를 수정해서 테스트를 해보았습니다.
아래 쿼리처럼 결과가 나왔는데요
SELECT *
FROM banktbl
WHERE actnumber = '1111122233333'
AND baccname = '홍길동'
AND bprice = '210000'
result : 180427184603279::262573
SELECT *
FROM banktbl
WHERE actnumber = '1111122233333'
AND baccname = '홍길동'
AND bprice = '1000'
result : 190418075503542::262578
SELECT *
FROM banktbl
WHERE actnumber = '1111122233333'
AND bkjukyo = '홍길동'
AND bprice = '1000'
result : 190418080202735::262578 (주문번호 :: 무통장고유값)
쿼리결과 3개중에 맨위에것은 고유값이 한개이기때문에 매칭성공으로 처리할수있으나
아래 2개는 주문번호는 다르고 고유값이 같은경우 비매칭(동명이인)이라고 처리를 하고싶은데요.
어떻게 처리를 해야될지 막막하네요. 조언좀 부탁드립니다.