다음과 같이 회원, 구매한 상품, 구매한 날짜가 기록된 자료에서 회원들의 월별 재구매율을 알아보려면 어떻게 해야할까?
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 배열의 형태로 저장하였다.
'PHP' 카테고리의 다른 글
[PHP] 에러메시지 Undefined offset 의미 (0) | 2018.06.20 |
---|---|
[PHP] 바이너리 서치로 인덱스 필드값 찾기 (0) | 2018.05.15 |
[PHP] 회원들의 재구매율 알아보기(4) - 완성 (0) | 2017.10.13 |
[PHP] 회원들의 재구매율 알아보기(3) - 날짜 계산하기 strtotime() (0) | 2017.09.26 |
[PHP] 회원들의 재구매율 알아보기(2) - 두 배열 비교하기 in_array() (0) | 2017.09.25 |
[PHP] mysqli_fetch_row, assoc, array 의 차이 (4) | 2017.09.20 |
[PHP] DB에서 특정 행들만 가져오기(8) - DB 에서 열 이름 가져오기 (0) | 2017.09.19 |
[PHP] DB에서 특정 행들만 가져오기(7) - DB에서 가져온 정보 출력하기 mysqli_fetch_row() (0) | 2017.09.18 |
[PHP] DB에서 특정 행들만 가져오기(6) - 쿼리 작성하기 mysqli_query() (0) | 2017.09.17 |
[PHP] DB에서 특정 행들만 가져오기(5) - 변수를 바꾸어 문자열 출력 sprintf() (0) | 2017.09.14 |
댓글