본문 바로가기
코딩강좌/PHP

PHP DB 결과 연관 배열로 저장하기

by 대디동동 2023. 10. 13.
728x90

안녕하세요. 대디동동입니다.

 

PHP  참 오래된 언어입니다.

하지만, 속도, 안정성, 편의성 등으로 인해서 아직도 많이 사용되고 있습니다.

 

PHP에서 DB는 거의  MySQL, MariaDB 많이 사용하실 텐데,

검색된 결과를 변수 (배열) 저장 후 필요한 곳에서 검색해서 사용해야 되는 경우가 있습니다.

 

우리나라의 경우 그누보드 커스텀을 많이 사용하시기에 그누보드 버전으로 설명드리겠습니다.


문제

아래와 같은 데이터가 있을 경우,

날짜별로 그룹화하여  visit의 합계를 구한 후,

달력에 방문수를 표시할 경우

datetime visit
2023-12-01 01:00:00 3
2023-12-02 01:00:00 4
2023-12-03 01:00:00 3
2023-12-03 01:00:00 4
2023-12-04 01:00:00 3
... ...

달력에 결과 표시할 경우 예시
달력에 결과 표시할 경우 예시

<?
//그누보드 버전

//쿼리->쿼리결과 반환
$sqlGrp = "SELECT sum(visit) as cnt, substring(`datetime`,1,10) as checkDate FROM `TIME_TABLE` WHERE substring(`datetime`,1,7) = '2023-10' group by substring(`datetime`,1,10)";
$resultGrp = sql_query($sqlGrp);

//array 배열 변수 선언 --> 반복문 돌면서 배열에 저장
$arrGrp = array(); 
while ($rowGrp = sql_fetch_array($resultGrp)) {
  $arrGrp[] = $rowGrp;
}

//해당 배열의 checkdate 값에 2023-10-13  값이 존재하면
//배열의 key 값을 찾아옴
//배열의 키값을 통해서 cnt 값을 가져오기
for ($i=1; $i<31; $i++) { //날짜 루프
    if (array_search('2020-10-13', array_column($arrGrp, 'checkDate'))){
        $key = array_search($dateT4, array_column($arrGrp, 'checkDate'));
        $cnt = $arrGrp[$key]['cnt'];
    }
}
?>

달력 만드는 루프문안에 쿼리를 하나씩 날리면 31개의 쿼리가 필요하지만,

상단처럼 한번 배열로 저장하여 필요할 때 해당 변수에서 가져오게 되면 한 개의 쿼리만 사용합니다.

 

반복문안에 여러 쿼리를 사용할 경우 엄청나게 느려지는 경험을 하실 수 있으니,

귀찮더라도 쿼리를 줄이는 방향으로 코딩하시길 추천드립니다.

반응형

'코딩강좌 > PHP' 카테고리의 다른 글

PHP 인증 번호 숫자 6자리, 8자리 만들기  (0) 2023.10.11