누적 금액순으로 단골 고객 가져오기 정보
누적 금액순으로 단골 고객 가져오기본문
안녕하세요 빗아입니다.
영카트 5.3.x 관리자 리뉴얼 해보면서 쇼핑몰 관리자 메인 만들다가 누적 구매 금액순으로 단골 고객 가져와 보았습니다.
필요하신 분들은 가져가서 쓰시면 될 거 같네요ㅎㅎ
css는 따로 안 올려드리니 만들어서 사용하시면 되겠습니다
영카트 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
4
댓글 12개
오호 생각도 못했는데.. 적용해봐야겠네요
감사합니다ㅎㅎ
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>
이럼 대강 모양까지 대~~~~충 잡히네요
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]['mb_name'] = $row['mb_name']; 추가 해놨습니다
$ranking[$list]['mb_name'] = $row['mb_name']; 추가 해놨습니다
오 좋은 정보 감사합니다~!!
감사합니다ㅎㅎ
완전 초보가 문의 드립니다.
위 내용으로 페이지를 만들었습니다.
항목에 해당 회원등급과 최종접속일을 추가할려고 합니다.
$ranking[$list]['회원등급] = $row['회원등급'];
$ranking[$list]['최종접속일'] = $row['최종접속일'];
어떻게 불러오나요.
생초보가 여쭈어 봅니다
위 내용으로 페이지를 만들었습니다.
항목에 해당 회원등급과 최종접속일을 추가할려고 합니다.
$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 != ''";
해당 부분을 아래와 같이 변경해주세요
$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 != ''";
감사합니다.
능력이 부럽습니다
감사요
$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 != ''" and a.od_time >= '2024-01-01 00:00:00'";
추가해주면 특정기간 이후로 조회됩니다.