본문 바로가기
PHP

[PHP] 회원들의 재구매율 알아보기(1) - MySQL 컬럼(열)을 배열로 만들기

by LightBlogger 2017. 9. 24.

다음과 같이 회원, 구매한 상품, 구매한 날짜가 기록된 자료에서 회원들의 월별 재구매율을 알아보려면 어떻게 해야할까?


user_data.csv




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 배열의 형태로 저장하였다.






반응형

댓글