쿼리조언 0 3 510

by 신의한수 [MySQL] [2019.08.06 09:50:29]


안녕하세요.

현재 부동산관련 프로그램작업을 진행하고 있는데요.

조인관련해서 막히는 부분이 있어 도움을 얻고자 합니다.

 

SELECT wm.id
     , wm.com_name
     , wm.com_ceo
     , wm.tphone
     , wm.hphone
     , wm.com_address1
     , wm.com_address2
     , wm.com_address3
     , wm.com_address4
     , wm.photo
  FROM member wm
  LEFT JOIN order wo
    ON wm.id = wo.send_id
  LEFT JOIN adorder
    ON wm.id = wa.memid
   AND wo.orderid = wa.orderid
 WHERE (wo.status = 'OY' or wo.status = 'RD')
   AND wo.orderid = '190517125024282'
   AND (wo.fp_pay_sdate <= '2019-08-06 08:24:08' AND wo.fp_pay_ldate >= '2019-08-06 08:24:08' or wa.fp_pay_sdate <= '2019-08-06 08:24:08' AND wa.fp_pay_ldate >= '2019-08-06 08:24:08')
 GROUP BY wm.id
 ORDER BY rand()
 LIMIT 4

member : 회원테이블

order : 주문테이블

adorder : 정기결제테이블

위 3가지의 테이블이 있는데요.

 

프로그램 프로세스내용은

부동산중개업자가 지역을 선택해서 결제를 하게되면 해당지역에 있는 모든 매물을 중개업자가 볼수있으며

해당매물상세페이지 해당중개업자가 랜덤으로 노출되는 프로그램입니다.

 

현재 adorder같은경우는 18667020의 row가 있습니다.

말그대로 정기결제이다보니 자동으로 결제가 이루어지면서 데이터가 계속 쌓이는데요.

쿼리를 잘못구성해서 그런것인지. 로딩속도가 너무나도 느린데요. 

고수님들의 조언좀 구하고자 합니다.

질문이 부족한 부분이 많네요 ㅡㅡ 

by 생각 [2019.08.06 10:13:23]

MYSQL 인거 같네요.

1. GROUP BY ID를 사용 한 이유 (그룹화 정렬화?)

2. OR은 왠만해서는 지양해서 사용함이 좋습니다. WO.STATUS 는 IN 으로 대체하면 좋겠죠.

3. WHERE AND ( ~ AND ~ OR ~ AND) 이 구문은 잘못됐습니다. 수정해야합니다.


by 신의한수 [2019.08.06 10:47:38]

답변감사합니다.

3번째 WHERE AND부분을 어떻게 수정해야되는지 조언좀부탁드립니다.^^


by 마농 [2019.08.09 08:27:30]
SELECT wm.id
     , wm.com_name
     , wm.com_ceo
     , wm.tphone
     , wm.hphone
     , wm.com_address1
     , wm.com_address2
     , wm.com_address3
     , wm.com_address4
     , wm.photo
  FROM (SELECT wo.send_id AS id
          FROM order wo
         WHERE wo.status IN ('OY', 'RD')
           AND wo.orderid = '190517125024282'
           AND '2019-08-06 08:24:08' BETWEEN wo.fp_pay_sdate AND wo.fp_pay_ldate
         UNION
        SELECT wa.memid
          FROM adorder wa
         WHERE '2019-08-06 08:24:08' BETWEEN wa.fp_pay_sdate AND wa.fp_pay_ldate
         ORDER BY RAND()
         LIMIT 4
        ) a
 INNER JOIN member wm
    ON a.id = wm.id
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입