sql 질문드립니다.
본문
$write_table = $g5['write_prefix'] . $bo_table;
$sum_count = "0";
$sql = "
select a.mb_id, b.mb_name, b.mb_13, b.mb_level, group_concat(wr_56 separator '||') wr_56, a.wr_50, a.wr_46, count(a.wr_56) as cnt , sum(replace(a.wr_56,',','')) 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}' and wr_50 like '%{$stx10}%' and wr_8 like '%{$stx6}%' and wr_6 like '%{$stx4}%' and wr_5 like '%{$stx5}%' and wr_7 like '%{$stx7}%' and wr_52 like '%{$stx8}%' and wr_71 like '%{$stx9}%'
group by a.mb_id, b.mb_name ORDER BY tot DESC
";
$result = sql_query($sql, true);
while ($row = sql_fetch_array($result)) {
<?php echo $row['cnt'] ?> : 1
<?php echo number_format($row['tot']); ?> : 1,000,000
wr_56이 배열로 되어 있습니다.
1,000,000||1,500,000||800,000
$row['tot'] 했을때나, $row['cnt'] 했을때
1개만 가져옵니다.
그래서 카운트와 tot값이 맞지 않는데 배열값 전부를 합친금액과 배열의 개수를 정확하게 가져오고 싶은데
어떻게 해야 할까요?
!-->답변 2
1,000,000||1,500,000||800,000 분리 했잖아요 | 이렇게 분리 한거면
$test = expload('|',$row['wr_1']); 이런식으로 분리한 필드를 배열에 넣어줘야해요 $row['wr_1'] << 이건 테스트로 넣은거에요 직접 필드 넣어서 해보세요
그러고 사용할적에는 $test[0] 이렇게 0부터 시작해요 3가지가 있으니 $test[0] $test[1] $test[2] 이렇게 있겠죠
응용해보세요
1. group by a.mb_id, b.mb_name
하실 거라면 굳이 left join하실 필요가 없습니다.
2. group_concat(wr_56 separator '||') wr_56,
count(a.wr_56) as cnt ,
sum(replace(a.wr_56,',','')) as tot
from {$write_table} a
group by mb_name 했으므로 wr_56, cnt, tot 모두 mb_name 당 한 건만 나옵니다.
query 문을 보면 원하시는 대로 나올 듯한데요...