테스트 사이트 - 개발 중인 베타 버전입니다

sql 질문 채택완료

밀랍 4년 전 조회 1,516

</p>

<p>        $sql = "

            select a.mb_id, b.mb_name, wr_12, count(*) as cnt , sum(a.wr_31) as tot        

              from {$write_table} a

                       left outer join {$g5['member_table']} b on a.mb_id = b.mb_id 

             where wr_29 between '{$stx1}' and '{$stx2}'

             group by a.mb_id, b.mb_name ORDER BY tot DESC";

        $result = sql_query($sql);

        while ($row = sql_fetch_array($result)) {

        $list_name = explode('||',$row['wr_12']);</p>

<p>

 

기간내에 포함되는 지난 모든 게시글의 wr_12값을 뿌려주고 싶은데..

저렇게 하니까 기간내 모든 wr_12값이 아닌 바로 이전 게시글의 wr_12값만 가져옵니다.

 

기간내 모든 wr_12값을 전부 뿌려줄려면 어떻게 해야 하나요?

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
        $sql = "
            select a.mb_id, b.mb_name, group_concat( wr_12) wr_12, count(*) as cnt , sum(a.wr_31) as tot        
              from {$write_table} a
                       left outer join {$g5['member_table']} b on a.mb_id = b.mb_id 
             where wr_29 between '{$stx1}' and '{$stx2}'
             group by a.mb_id, b.mb_name ORDER BY tot DESC";
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

d
4년 전

음 저렇게 하시면 모든 기간내에 wr_12값 가져오실거 같은데..

나머지 게시글이 wr_29 값이 없거나, mb_id 가 없거나.. 조건에 맞지 않거나 하지 아닐까요..? 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 10개

밀랍
4년 전
wr_12값은 모두 들어가 있습니다.
계속 테스트중인데.. 카운트도 맞고, 금액도 맞고.. 다 맞는데
wr_12값을 모두 못가져 옵니다.
밀랍
4년 전
wr_12값이 배열로 들어가 있어서 안나오는 경우도 있나요?
각 게시물마다 wr_12값이 몇개씩 들어가 있어서 explode로 뽑아내고 있는데...
d
dev2lgb
4년 전
wr_12 값이 배열로 들어갔을 리는 없을거같아요
위에 보니까 abc||cde||fg 이런식으로 들어가 있으신거같은데 하나의 값이죠..

$result = sql_query($sql);
이부분 윗줄에서
echo $sql;

찍어보시고

나온 쿼리문
phpmyadmin 에서 쿼리 돌려보시면 정상적으로 원하시는 값이 나오나요?
d
dev2lgb
4년 전
아 ... 한 회원이 글을 여러개 올리는 경우도 있나요?
밀랍
4년 전
네. 한 회원이 여러개 올리는 경우가 많습니다.

print_r2 찍어봐도... 값은 마지막 것만 나옵니다. ㅠㅠ
d
dev2lgb
4년 전
아.. 쿼리가 아예 잘못 됐네요...
혹시 멤버테이블을 조인한 이유가 있나요?
회원 한명당 하나만 불러오시나요?
그렇다면, wr_12는 그회원이 작성한 글중 어떤걸 기준으로 뽑으시나요?
아.. 기간내에 그회원이 작성한 모든글의 wr_12의 값인가요?

[code]
$sql = "
select a.mb_id, b.mb_name, wr_12, count(*) as cnt , sum(a.wr_31) as tot
from {$write_table} a
left outer join {$g5['member_table']} b on a.mb_id = b.mb_id
where wr_29 between '{$stx1}' and '{$stx2}'
group by a.mb_id, b.mb_name ORDER BY tot DESC";
[/code]
밀랍
4년 전
멤버테이블을 조인한 이유는 같은 아이디값을 검색, wr_31값을 더해서 순위를 메기기 위해서 조인을 했습니다.
d
dev2lgb
4년 전
그렇면... 제 짧은 지식으로는..

while문 안에서 쿼리를 한번더 돌리셔서, wr_12값을 찍어주는게 좋을거같아요!
분명히 더 좋고 빠른방법은 있겠지만.. 그건 다른분이 아마!

[code]
$sql = "
select a.mb_id, b.mb_name, count(*) as cnt , sum(a.wr_31) as tot
from {$write_table} a
left outer join {$g5['member_table']} b on a.mb_id = b.mb_id
where wr_29 between '{$stx1}' and '{$stx2}'
group by a.mb_id, b.mb_name ORDER BY tot DESC";
$result = sql_query($sql);
while ($row = sql_fetch_array($result)) {


$sql = "
select wr_12
from {$write_table}
where mb_id = {$row['mb_id']}
";
// 다시 반복문 써서 출력
$list_name = explode('||',$row2['wr_12']);

~~~~

[/code]
밀랍
4년 전
회원 한명당 하나만 불러온다는게 무슨 말인지 모르겠습니다.
기간내에 모든 게시글을 검색해서... 같은 id값을 검색해서 순위를 메기기 때문에...
wr_12값은 해당 회원이 구입한 구입 물품입니다.

wr_31은 wr_12값을 모두 더한 값이고.. 그 금액으로 순위를 매기고 있습니다.
밀랍
4년 전
채택을 못드려 죄송합니다
원하는 답을 다른분께서 다셔서....
정성어린 답글 정말 감사합니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인