쿼리문 하나 검토좀 부탁 드립니다

쿼리문 하나 검토좀 부탁 드립니다

QA

쿼리문 하나 검토좀 부탁 드립니다

본문

추천수를 합계 내서 포인트 주려고 하는데요
맴버의 최근 5개만 합계 내려면
 
 $sumSql = "select sum(wr_good) as point from $write_table where wr_is_comment = 0 and mb_id ='{$member[mb_id]}' limit 5";
 $sumPoint = sql_fetch($sumSql);
 $plusPoint = $sumPoint[point] ;
이렇게 하면 맞나요?
그런데 이렇게 하면 맴버의 5개만이 아니고 모든 합계를 내는것 같아요
최근 5개만 합계 내려면 for 문으로 돌려야 하나요?

이 질문에 댓글 쓰기 :

답변 2

limit 은 앞쪽 쿼리의 결과의 일부를 보여주는 역할을 합니다.
sum은 where 조건과 group by 등으로 합의 대상으로 정할 수 있지만,
limit 으로 제한된 결과의 합을 구하는 것은 아닙니다.

이렇게 하면 될것 같네요. ^^

$sumSql = "SELECT SUM(wr_good) AS point FROM (SELECT wr_good FROM $write_table WHERE wr_is_comment = 0 AND mb_id ='{$member[mb_id]}' ORDER BY wr_id DESC LIMIT 5) AS subquery";

네 그렇군요 잘 배웠습니다.
그런데 그냥 기본적인 limit 걸은 쿼리문과 for 문으로 합계를 구하는것과 어떤것이 빠르고 서버부담이 없을까요?
채팅 비슷한거라 초당 여러번 쿼리 할 수 있거든요

아 저도 항상 고민하는 부분입니다. ^^;
(mysql subquery에서 불필요한 정보를 추출하는 경우가 아니라면) mysql 쿼리 하나로 해결할 수 있다면 저는 쿼리를 선택합니다.
subquery도 결국은 내부적으로 for 루프일테고, mysql 엔진 만드는 사람이 (캐시와 인덱스 등을 사용하여) 저보다는 훨씬 더 효율적으로 프로그래밍 했을거라고 믿는 거죠. ^^;

갑자기 생각나서 다시 뒤늦게 추가 질문 드려 봅니다.

limit 가 쿼리 결과의 일부만 보여 준다면
limit 를 걸던 안걸던 해당 테이블은 모두 뒤진다는거네요?
그리 많은 레코드를 다 뒤지는것이 쬐금 걱정 되는데...

order by wr_id desc

최신글 기준으로 정렬을 추가 해주셔야 최근 5개만 합계를 구할 수 있겠죠
아래처럼 수정해보세요


$sumSql = "select sum(wr_good) as point from $write_table where wr_is_comment = 0 and mb_id ='{$member[mb_id]}' order by wr_id desc limit 5";
답변을 작성하시기 전에 로그인 해주세요.
전체 125,873 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT