누적 금액순으로 단골 고객 가져오기 > 영카트5 팁자료실

영카트5 팁자료실

누적 금액순으로 단골 고객 가져오기 정보

누적 금액순으로 단골 고객 가져오기

본문

안녕하세요 빗아입니다.

영카트 5.3.x 관리자 리뉴얼 해보면서 쇼핑몰 관리자 메인 만들다가 누적 구매 금액순으로 단골 고객 가져와 보았습니다.

필요하신 분들은 가져가서 쓰시면 될 거 같네요ㅎㅎ

css는 따로 안 올려드리니 만들어서 사용하시면 되겠습니다

<?php
function array_msort($array, $cols){ // 배열 재정열 함수
    $colarr = array();
    foreach ($cols as $col => $order) {
        $colarr[$col] = array();
        foreach ($array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); }
    }
    $eval = 'array_multisort(';
    foreach ($cols as $col => $order) {
        $eval .= '$colarr[\''.$col.'\'],'.$order.',';
    }
    $eval = substr($eval,0,-1).');';
    eval($eval);
    $ret = array();
    foreach ($colarr as $col => $arr) {
        foreach ($arr as $k => $v) {
            $k = substr($k,1);
            if (!isset($ret[$k])) $ret[$k] = $array[$k];
            $ret[$k][$col] = $array[$k][$col];
        }
    }
    return array_values($ret);
}
?>
<p>단골 고객<span>(비회원은 포함되지 않습니다.)</span></p>
<table>
	<tr>
		<th>순위</th>
		<th>회원 ID</th>
		<th>이름</th>
		<th>누적 주문</th>
		<th>총 구매금액</th>
	</tr>
	<?php
	$ranking = array();
	$list = 0;
	$sql = "select a.mb_id,a.od_cart_price,b.mb_name from {$g5['g5_shop_order_table']} a inner join {$g5['member_table']} b on a.mb_id = b.mb_id where a.od_status != '취소' and a.mb_id != ''"; // 주문상태 취소를 제외, 비회원 제외하고 불러옵니다.
	$rs = sql_query($sql);
	while($row = sql_fetch_array($rs)){
		$search_key = array_search($row['mb_id'], array_column($ranking, 'mb_id'));
		if($search_key > -1){
			$ranking[$search_key]['price'] += $row['od_cart_price'];
			$ranking[$search_key]['count'] += 1;
		} else {
			$ranking[$list]['mb_id'] = $row['mb_id'];
			$ranking[$list]['mb_name'] = $row['mb_name'];
			$ranking[$list]['price'] = $row['od_cart_price'];
			$ranking[$list]['count'] = 1;
			$list++;
		}
	}
	$rank = array_msort($ranking, array('price'=>SORT_DESC)); // 배열 재정열
	if(count($rank) > 7) $count = 7; // 출력 갯수
	else $count = count($rank);
	for($i=0; $i<$count; $i++){
	?>
	<tr>
		<td><?php echo $i + 1;?></td>
		<td><?=$rank[$i]['mb_id']?></td>
		<td><?=$rank[$i]['mb_name']?></td>
		<td><?=number_format($rank[$i]['count'])?><span>건</span></td>
		<td><?=number_format($rank[$i]['price'])?><span>원</span></td>
	</tr>
	<?php } if($i == 0){?>
	<tr>
		<td colspan="50">아직 단골 고객이 없습니다.</td>
	</tr>
	<?php }?>
</table>
추천
4

댓글 11개

php5.5 버전 이하의경우 array_column 함수가 없으니 만들어 줍니다.

if (! function_exists('array_column')) {
    function array_column(array $input, $columnKey, $indexKey = null) {
        $array = array();
        foreach ($input as $value) {
            if ( !array_key_exists($columnKey, $value)) {
                trigger_error("Key \"$columnKey\" does not exist in array");
                return false;
            }
            if (is_null($indexKey)) {
                $array[] = $value[$columnKey];
            }
            else {
                if ( !array_key_exists($indexKey, $value)) {
                    trigger_error("Key \"$indexKey\" does not exist in array");
                    return false;
                }
                if ( ! is_scalar($value[$indexKey])) {
                    trigger_error("Key \"$indexKey\" does not contain scalar value");
                    return false;
                }
                $array[$value[$indexKey]] = $value[$columnKey];
            }
        }
        return $array;
    }
}

46-47줄에 이름이 빠져있어서 입력
$ranking[$list]['mb_name'] = $row['mb_name'];

대강의 css적용을 위해 25줄을 아래처럼 변경
<link rel="stylesheet" href="<?php echo G5_ADMIN_URL; ?>/css/admin.css">
<div class="local_desc02 local_desc">
<p>단골 고객<span>(비회원은 포함되지 않습니다.)</span></p>
</div>

26줄 테이블을 div로 감싸주기
<div class="tbl_head01 tbl_wrap">
    <table>
      .
      .
      .
  </table>
</div>

이럼 대강 모양까지 대~~~~충 잡히네요
완전 초보가 문의 드립니다.
위 내용으로 페이지를 만들었습니다.
항목에 해당 회원등급과 최종접속일을 추가할려고 합니다.

            $ranking[$list]['회원등급] = $row['회원등급'];
            $ranking[$list]['최종접속일'] = $row['최종접속일'];

어떻게 불러오나요.
생초보가 여쭈어 봅니다
$sql = "select a.mb_id,a.od_cart_price,b.mb_name from {$g5['g5_shop_order_table']} a inner join {$g5['member_table']} b on a.mb_id = b.mb_id where a.od_status != '취소' and a.mb_id != ''";
해당 부분을 아래와 같이 변경해주세요

$sql = "select * from {$g5['g5_shop_order_table']} a inner join {$g5['member_table']} b on a.mb_id = b.mb_id where a.od_status != '취소' and a.mb_id != ''";
전체 392
영카트5 팁자료실 내용 검색

회원로그인

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