Mysql문 문의

Mysql문 문의

QA

Mysql문 문의

답변 6

본문

SELECT b.sno,b.regDt,b.modDt,b.groupNo,b.groupThread,b.writerNm,b.writerId,b.channel,b.writerNick,b.writerEmail,b.writerHp,b.subject,b.subSubject,b.urlLink,b.uploadFileNm,b.saveFileNm,b.writerPw,b.memNo,b.parentSno,b.writerIp,b.isNotice,b.isSecret,b.hit,b.memoCnt,b.category,b.writerMobile,b.goodsNo,b.goodsPt,b.orderNo,b.mileage,b.mileageReason,b.isDelete,b.recommend,b.replyStatus,b.eventStart,b.eventEnd,b.bdUploadStorage,b.bdUploadPath,b.bdUploadThumbPath,b.isMobile,b.answerSubject,b.answerContents,b.answerManagerNo,b.answerModDt,b.isShow,b.category2depth,b.brandcodes, b.contents as contents,g.goodsNm,g.scmNo,g.imageStorage,g.imagePath,g.brandCd,g.makerNm,g.originNm,g.onlyAdultFl,g.onlyAdultImageFl,g.goodsPrice FROM es_bd_TNBreview as b LEFT OUTER JOIN es_goods as g ON b.goodsNo = g.goodsNo WHERE 1 AND isNotice = ? AND (b.goodsNo = '0' OR (b.goodsNo > 0 AND (g.goodsAccess !='group' OR (g.goodsAccess='group' AND FIND_IN_SET('1', REPLACE(g.goodsAccessGroup,"||",","))) OR (g.goodsAccess='group' AND !FIND_IN_SET('1', REPLACE(g.goodsAccessGroup,"||",",")) AND g.goodsAccessDisplayFl ='y')))) AND isDelete = 'n' ORDER BY b.groupNo asc , groupThread LIMIT 0,3 SELECT b.sno,b.regDt,b.modDt,b.groupNo,b.groupThread,b.writerNm,b.writerId,b.channel,b.writerNick,b.writerEmail,b.writerHp,b.subject,b.subSubject,b.urlLink,b.uploadFileNm,b.saveFileNm,b.writerPw,b.memNo,b.parentSno,b.writerIp,b.isNotice,b.isSecret,b.hit,b.memoCnt,b.category,b.writerMobile,b.goodsNo,b.goodsPt,b.orderNo,b.mileage,b.mileageReason,b.isDelete,b.recommend,b.replyStatus,b.eventStart,b.eventEnd,b.bdUploadStorage,b.bdUploadPath,b.bdUploadThumbPath,b.isMobile,b.answerSubject,b.answerContents,b.answerManagerNo,b.answerModDt,b.isShow,b.category2depth,b.brandcodes, b.contents as contents,g.goodsNm,g.scmNo,g.imageStorage,g.imagePath,g.brandCd,g.makerNm,g.originNm,g.onlyAdultFl,g.onlyAdultImageFl,g.goodsPrice FROM es_bd_TNBreview as b LEFT OUTER JOIN es_goods as g ON b.goodsNo = g.goodsNo WHERE 1 AND isNotice = ? AND (b.goodsNo = '0' OR (b.goodsNo > 0 AND (g.goodsAccess !='group' OR (g.goodsAccess='group' AND FIND_IN_SET('1', REPLACE(g.goodsAccessGroup,"||",","))) OR (g.goodsAccess='group' AND !FIND_IN_SET('1', REPLACE(g.goodsAccessGroup,"||",",")) AND g.goodsAccessDisplayFl ='y')))) AND groupThread = '' AND isDelete = 'n' ORDER BY b.groupNo asc , ((g.fixedPrice - g.goodsPrice)/g.fixedPrice)*100 asc , groupThread LIMIT 0,4

 

으로 진한부분을 추가 시켰더니 작동을하지 않네요 어떻게 해야 할 까요?

 

이 질문에 댓글 쓰기 :

답변 6

loop문을 돌리면 sql을 실행시키는거 같네요. 

 

요런경우 다 이렇게 보시면 너무 양이 많고 복잡해보여서 1건만 돌려서 그부분만을 가지고 분석을 해야합니다. 그럼 나머지도 동일하니 해결이 될겁니다.

 

제가 쿼리 한개만 가지고 분석을 좀 해봤습니다.


SELECT b.sno
,b.regDt
,b.modDt
,b.groupNo
,b.groupThread
,b.writerNm
,b.writerId
,b.channel
,b.writerNick
,b.writerEmail
,b.writerHp
,b.subject
,b.subSubject
,b.urlLink
,b.uploadFileNm
,b.saveFileNm
,b.writerPw
,b.memNo
,b.parentSno
,b.writerIp
,b.isNotice
,b.isSecret
,b.hit
,b.memoCnt
,b.category
,b.writerMobile
,b.goodsNo
,b.goodsPt
,b.orderNo
,b.mileage
,b.mileageReason
,b.isDelete
,b.recommend
,b.replyStatus
,b.eventStart
,b.eventEnd
,b.bdUploadStorage
,b.bdUploadPath
,b.bdUploadThumbPath
,b.isMobile
,b.answerSubject
,b.answerContents
,b.answerManagerNo
,b.answerModDt
,b.isShow
,b.category2depth
,b.brandcodes
,b.contents as contents
,g.goodsNm
,g.scmNo
,g.imageStorage
,g.imagePath
,g.brandCd
,g.makerNm
,g.originNm
,g.onlyAdultFl
,g.onlyAdultImageFl
,g.goodsPrice 
FROM es_bd_TNBreview as b LEFT OUTER JOIN es_goods as g ON b.goodsNo = g.goodsNo 
WHERE 1 
AND isNotice = ? 
AND ( b.goodsNo = '0' OR ( b.goodsNo > 0  AND 
      ( 
          g.goodsAccess !='group' 
        OR (g.goodsAccess='group' AND FIND_IN_SET('1', REPLACE(g.goodsAccessGroup,"||",","))) 
        OR (g.goodsAccess='group' AND !FIND_IN_SET('1', REPLACE(g.goodsAccessGroup,"||",","))  AND g.goodsAccessDisplayFl ='y') 
      )
    )
) 
AND isDelete = 'n' 
ORDER BY b.groupNo asc, groupThread LIMIT 0,3 

 

 

AND isNotice = ?    <-- 이부분을 확인해보셔야할꺼 같습니다.

그리고  WHERE 의 AND조건문이 좀 복잡합니다. 이부분을 조금 단순화 시켜야 하지 않을까요?

 

 


SELECT
   .......
   .......
AND groupThread = '' 
AND isDelete = 'n' 
ORDER BY b.groupNo asc 
, ((g.fixedPrice - g.goodsPrice)/g.fixedPrice)*100 asc   <-- 추가된 부분
, groupThread LIMIT 0,4

 

((g.fixedPrice - g.goodsPrice)/g.fixedPrice)*100 asc  이부분을 추가 하신거 같은데 잘못하셨는데요?

필드 기준으로 정렬을 하려는 조건을 넣어야 하는데..계산을 해서 정렬을 하려고 하는게 동작이 안될꺼 같습니다.

 

동작하지 않을때 나오는 에러를 보는게 우선 이겠지만

일단 의심되는거는 g.fixedPrice 이 값이 select안에 없네요.

저거부터 추가 해보시죠

$arrGoodsField = ['scmNo','goodsNm','goodsPrice','brandCd','makerNm','originNm','imagePath','imageStorage','onlyAdultFl','onlyAdultImageFl','fixedPrice','goodsPrice'];
                $goodsFields = ','.implode(',', DBTableField::setTableField('tableGoods', $arrGoodsField, null, 'g'));


요런식으로 하면 될까요? 고도몰이구요 소스 저렇게 바꿔도 작동 안하네요 ㅠ

자세한 내용은 에러를 봐야 할 것 같습니다만 아래 정렬하는 부분에서 

 ((g.fixedPrice - g.goodsPrice)/g.fixedPrice)*100 asc

 

 *100 asc 이 부분으로 인하여 오류가 잘생하지 않나 싶습니다.

 

위 구문을 괄호를 (   ((g.fixedPrice - g.goodsPrice)/g.fixedPrice)*100 ) asc 이렇게 해 보시는 건 어떨까요 ?

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