[PHP] 회원들의 재구매율 알아보기(1) - MySQL 컬럼(열)을 배열로 만들기
다음과 같이 회원, 구매한 상품, 구매한 날짜가 기록된 자료에서 회원들의 월별 재구매율을 알아보려면 어떻게 해야할까?
1월에 구매한 유저들의 명단을 추출하고 2월에 구매한 유저들의 명단을 추출하여 서로 비교해 보면 될 것이다.
1월에 구매한 유저들의 명단은 다음과 같이 구할 수 있다.
SELECT distinct user_id FROM `user_data` WHERE date>='2017-01-01' and date<'2017-02-01';
이제 여기 나온 user_id를 PHP 에서 배열의 형태로 만들고 2월 유저들도 같은 방식으로 만들어
두 배열을 비교해 보면 되겠다.
2017/09/17 - [PHP] - [PHP] DB에서 특정 행들만 가져오기(6) - 쿼리 작성하기 mysqli_query()에서 본 대로
행row을 배열로 만드는 것은 mysqli_fetch_row() 함수를 쓰면 가능한데
열column을 배열로 만드는 것은 어떻게 해야할까?
아쉽게도 별도로 제공되는 함수는 없고, 간단한 반복문을 통해 배열을 만들어야 한다.
앞서와 마찬가지로 localhost 에 root 로 로그인하고, 위의 쿼리를 질의하여 결과를 $result에 담자.
<?php $conn = mysqli_connect("localhost", "root", "123456789"); mysqli_select_db($conn, "test"); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-01-01' and date<'2017-02-01';"; $result = mysqli_query($conn, $query); ?> </body> </html>
이제 다음과 같이 mysqli_fetch_row()로 매 행을 가져와
그 중 첫 번째 $row[0] 요소만 출력하면 앞서의 열과 동일할 것이다.
while($row = mysqli_fetch_row($result)){
echo $row[0],"</BR>";
}
출력이 목적은 아니지만, 일단 출력해 보자.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-01-01' and date<'2017-02-01';"; $result = mysqli_query($conn, $query); while($row = mysqli_fetch_row($result)){ echo $row[0],"</BR>"; } ?> </body> </html>
결과는 다음과 같다.
이제 하나의 배열을 만들어, 이것을 하나씩 배열의 요소로 담으면 되겠다.
일단 빈 배열을 만들고
$array_1 = array();
그것의 0번째 요소, 1번째 요소, 2번째 요소... 를 반복문을 통해 다음과 같이 지정해 주자.
mysqli_fetch_row()가 $result의 첫 번째 행을 가져와 $row()에 담고 그것의 첫 번째 요소 $row[0] 을 배열의 첫 번째 $array_1[0]에 담음
mysqli_fetch_row()가 $result의 두 번째 행을 가져와 $row()에 담고 그것의 첫 번째 요소 $row[0] 을 배열의 두 번째 $array_1[1]에 담음
mysqli_fetch_row()가 $result의 세 번째 행을 가져와 $row()에 담고 그것의 첫 번째 요소 $row[0] 을 배열의 세 번째 $array_1[2]에 담음
이것을 반복문으로 표현하면 다음과 같다.
$i = 0;
while($row = mysqli_fetch_row($result)){
$array_1[$i] = $row[0];
$i = $i + 1;
}
확인을 위해 배열 중 몇 개만 출력해 본다.
echo $array_1[0],$array_1[1],$array_1[2];
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <?php $query = "SELECT distinct user_id FROM `user_data` WHERE date>='2017-01-01' and date<'2017-02-01';"; $result = mysqli_query($conn, $query); $array_1 = array(); $i = 0; while($row = mysqli_fetch_row($result)){ $array_1[$i] = $row[0]; $i = $i + 1; } echo $array_1[0],$array_1[1],$array_1[2]; ?> </body> </html>
결과는 다음과 같다.
구분자가 없어 모두 붙었지만, 위에서 본 133, 74, 89 등이 배열에 잘 들어간 것을 볼 수 있다.
참고로 위와 같이 $i = 0 을 지정해 주고 $i 를 1씩 증가시킬 때는
while() 대신 for() 를 쓰면 조금 더 효율적으로 적을 수 있다.
for() 의 괄호 안에는 세 가지 요소가 들어가며 각각 ①초기값 ②T/F 판단 조건 ③반복시 행동 을 넣는다.
그러므로 위의 while() 문은 for()를 이용하여 다음과 같이 적을 수 있고
for($i = 0; $row = mysqli_fetch_row($result); $i = $i + 1){
$array_1[$i] = $row[0];
}
여기서 $i = $i + 1 은 줄여서 $i++로 쓸 수 있다.
for($i = 0; $row = mysqli_fetch_row($result); $i++){
$array_1[$i] = $row[0];
}
이렇게 MySQL의 컬럼을 PHP 배열의 형태로 저장하였다.