쿼리문 질문드립니다.

쿼리문 질문드립니다.

QA

쿼리문 질문드립니다.

본문


select wr_10, wr_5, wr_datetime
from {$write_table}
where wr_10 = '사과'
order by wr_datetime desc 

Array
(
    [wr_10] => 사과
    [wr_5] => 5
    [wr_datetime] => 2022-11-19
)
Array
(
    [wr_10] => 사과
    [wr_5] => 3
    [wr_datetime] => 2022-11-18
)
Array
(
    [wr_10] => 사과
    [wr_5] => 8
    [wr_datetime] => 2022-11-17
)
Array
(
    [wr_10] => 사과
    [wr_5] => 2
    [wr_datetime] => 2022-11-16
)
Array
(
    [wr_10] => 사과
    [wr_5] => 5
    [wr_datetime] => 2022-11-15
)
Array
(
    [wr_10] => 사과
    [wr_5] => 4
    [wr_datetime] => 2022-11-14
)


일때...

wr_5의 합계가 10개까지만 나오게 하고 싶습니다.
오래된 날짜순으로... 


Array
(
    [wr_10] => 사과
    [wr_5] => 5
    [wr_datetime] => 2022-11-15
)
Array
(
    [wr_10] => 사과
    [wr_5] => 4
    [wr_datetime] => 2022-11-14
)

이거나..


Array
(
    [wr_10] => 사과
    [wr_5] => 2
    [wr_datetime] => 2022-11-16
)
Array
(
    [wr_10] => 사과
    [wr_5] => 5
    [wr_datetime] => 2022-11-15
)
Array
(
    [wr_10] => 사과
    [wr_5] => 4
    [wr_datetime] => 2022-11-14
)

이렇게 나오게 할려면 쿼리문을 어떻게 수정해야 하나요?

이 질문에 댓글 쓰기 :

답변 5


$sql = "
select wr_10, wr_5, wr_datetime
from {$write_table}
where wr_10 = '사과'
order by wr_datetime desc 
";
 
$result = sql_query($sql);
 
while ($row = sql_fetch_array($result)) {        
    print_r2($row);    
    
    $sum = $sum + (int) $row['wr_5'];
            
    if ($sum > 10)
        break;
}
select wr_10, wr_5, wr_datetime
from {$write_table}
where wr_10 = '사과'
order by wr_datetime desc limit 10 하면 10개까지 나옵니다.

쿼리문을 수정하기 보다는

질의 결과를 다시 한번 가공하는 방법을 추천드립니다.

질문이 좀 이상하네요

'합계'가 10개?

wr_5의 내용이 10개만  = 레코드가 10개 

와 동일한 내용이라서

 

limit 10;하시면됩니다만

 

조건이 중요하겠죠

wr_10 = '사과' 의

sum(wr_5) = '10' 인것만 찾으시는거라면

조건만 샘플링으로 구성해봤는데요

sum으로 조건을 먹이기가 애매해서 3개의 컬럼값이 10인 대상이 되는 조건만 추출해봤습니다.

임시테이블로 구성해서 tmp로 테이블을 구성한것이니 무시하시면되고

 


SELECT a.no ano, a.wr_5 awr5,b.no bno, b.wr_5 bwr5, c.no cno, c.wr_5 cwr5
 FROM tmp a, tmp b, tmp c
WHERE a.no <> b.no
AND a.no <> c.no
AND b.no <> c.no
AND (a.wr_5+b.wr_5+c.wr_5) = 10
AND a.wr_10 = '사과'
AND b.wr_10 = a.wr_10
AND c.wr_10 = a.wr_10
ORDER BY a.wr_datetime DESC, b.wr_datetime DESC, c.wr_datetime DESC
LIMIT 10

로 표현가능합니다.

좀 어려운 query 같네요.

https://stackoverflow.com/questions/25834382/mysql-each-row-sum

여기서 다시 한번 select 해서 조건문 걸면 될 듯합니다.

최적화한 것은 잘 모르겠네요.

답변을 작성하시기 전에 로그인 해주세요.
전체 10,639
QA 내용 검색

회원로그인

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