관리자 매출현황에 차트를 넣어보려고 합니다.
본문
매출현황을 차트로 만들어보고 있습니다.
ajax로 연도별 매출데이터들을 json 으로 가져오고 싶습니다.
지금 막연하게 생각하고 차트구현시켜놓긴 했는데 ajax가 아닌
스크립트로 테이블에 데이터들을 불러와 배열에 넣고 그 데이터로 차트를 그렸습니다.
var tr = document.querySelectorAll('tbody tr');
var yearArr = [];
var operFitArr = [];
var netFitArr = [];
var cardArr = [];
var accountArr = [];
for(var i = 0; i < tr.length; i++){
yearArr.push(tr[i].children[0].children[0].innerText);
operFitArr.push(tr[i].children[2].innerText.replace(/,/g, ''));
netFitArr.push(tr[i].children[4].innerText.replace(/,/g, ''));
cardArr.push(tr[i].children[8].innerText.replace(/,/g, ''));
accountArr.push(tr[i].children[5].innerText.replace(/,/g, ''));
}
var ctx = document.getElementById('saleChart').getContext('2d');
var chart = new Chart(ctx, {
data: {
labels: yearArr,
datasets: [
/*{
type: 'line',
label: '카드사용',
data: cardArr,
backgroundColor: 'red',
borderColor: 'red',
fill: false
},
{
type: 'line',
label: '무통장',
data: accountArr,
backgroundColor: 'yellow',
borderColor: 'yellow',
fill: false
},*/
{
type: 'bar',
label: '주문합계',
data: operFitArr,
backgroundColor: '#00796B'
},
{
type: 'bar',
label: '실매출합계',
data: netFitArr,
backgroundColor: '#FFA000'
},
]
},
options: {
animation: {
duration: 2000,
}
}
});
저렇게 하는게 심플하긴 한데, 제가 해보고싶은건 ajax로 데이터를 직접 가져와보고싶어서입니다.
ajax를 잘 못다루고 개발자는 아니어서 sql, php 또한 가져다 쓰는 것만 할 줄 알고 잘 못다룹니다;;ㅠㅠㅠ
예전에 게시판 리스트페이지에서 ajax로 게시글 데이터를 가져와서 뷰페이지를 모달로 띄웠었는데 그때 처음으로 ajax를 써봤는데 그 때 해본 것을 경험삼아 매출데이터도 ajax로 가져오려고 합니다. https://sir.kr/g5_skin/9410 <- ajax로 뷰페이지 모달 띄울때 참고했던 스킨
sale1year.php 파일에서 sql로 연도별 데이터를 취합하는 부분을 그대로 가져와서 사용해볼까해서
ajax.salesStatus.php 파일을 만들어서 데이터를 취합하려는데 잘 안돼서 질문드립니다.
<?php
include_once('./_common.php');
header('Content-type:application/json');
include_once(G5_LIB_PATH.'/json.lib.php');
$fr_year = isset($_REQUEST['fr_year']) ? strip_tags($_REQUEST['fr_year']) : '';
$to_year = isset($_REQUEST['to_year']) ? strip_tags($_REQUEST['to_year']) : '';
$data = array();
$sql = " select od_id,
SUBSTRING(od_time,1,4) as od_date,
od_send_cost,
od_settle_case,
od_receipt_price,
od_receipt_point,
od_cart_price,
od_cancel_price,
od_misu,
(od_cart_price + od_send_cost + od_send_cost2) as orderprice,
(od_cart_coupon + od_coupon + od_send_coupon) as couponprice
from {$g5['g5_shop_order_table']}
where SUBSTRING(od_time,1,4) between '$fr_year' and '$to_year' ";
$chartData = sql_query($sql);
for($i=0;$row=sql_fetch_array($chartData);$i++){
if( $i == 0 )
$save['od_date'] = $row['od_date'];
if( $save['od_date'] != $row['od_date']) {
$data['year'] = $save['od_date'];
$data['order'] = $save['orderprice'];
$data['real'] = $save['receiptbank'] + $save['receiptvbank'] + $save['receiptiche'] +$save['receiptcard'] + $save['receipthp'];
$data['card'] = $save['receiptcard'];
unset($save);
$save['od_date'] = $row['od_date'];
}
$save['orderprice'] += $row['orderprice'];
if($row['od_settle_case'] == '무통장')
$save['receiptbank'] += $row['od_receipt_price'];
if($row['od_settle_case'] == '가상계좌')
$save['receiptvbank'] += $row['od_receipt_price'];
if($row['od_settle_case'] == '계좌이체')
$save['receiptiche'] += $row['od_receipt_price'];
if($row['od_settle_case'] == '휴대폰')
$save['receipthp'] += $row['od_receipt_price'];
if($row['od_settle_case'] == '신용카드')
$save['receiptcard'] += $row['od_receipt_price'];
}
if( $i == 0 ) {
$data['year'] = $save['od_date'];
$data['order'] = $save['orderprice'];
$data['real'] = $save['receiptbank'] + $save['receiptvbank'] + $save['receiptiche'] +$save['receiptcard'] + $save['receipthp'];
$data['card'] = $save['receiptcard'];
}
$data['error'] = '';
// print_r2($data);
die(json_encode($data));
이렇게 했는데 2021년도 데이터만 불러와집니다.
{
"year": "2021",
"order": 2021년도 주문합계 데이터,
"real": 2021년도 실제 매출합계 데이터,
"card": 2021년도 카드결제금액 데이터,
"error": ""
}
어느 부분을 수정하면 연도별로 데이터를 불러올 수 있을까요??
!-->!-->!-->답변 1
$sql = " select year( od_date) od_year, -- 추가
sum( od_send_cost) od_send_cost,
sum( ...
...
group by od_year
...
for($i=0;$row=sql_fetch_array($chartData);$i++){
if( !isset( $dave[ $row['od_year']]) $save[ $row['od_year']]= array();
$save['od_date']= $row['od_send_cost'];
...
}
이런 식으로 되어야 할 겁니다.
답변을 작성하시기 전에 로그인 해주세요.