모닝 블로그

20230622

nayoon 2023. 6. 22. 10:28

MySQL 페이징 처리

 

orders, limit, offset을 이용해서 페이징 처리가 가능하다.

 

 

limit: '행을 어마나 가져올지'

offset: '어디서부터 가져올지' -> (offset + 1)행부터 가지고 온다.

# MySQL

# 10개를 가져옴
select * from USER limit 10;


# 11행부터 10개를 가져옴
# select * from USER limit A offset B -> (B + 1)행부터 A개의 행을 출력
select * from USER limit 10 offset 10;


# 11행부터 10개를 가져옴
# select * from USER order limit A, B -> (A + 1)행부터 B개의 행을 출력
select * from USER order limit 10, 10

 

알아둬야하는 점

 

offset은 index를 타지 않기 때문에 대용량 데이터를 조회할 땐 조심해야 한다.

# 기존 페이징 처리 쿼리
select * from USER limit A, B

# 인덱스를 태우는 페이징 처리 쿼리
select * from USER where A < 'key' limit B

 

PHP array key type casting

key값이 int형인 array에 string으로 isset 메소드로 확인했는데 잘 확인되는 것을 보면서..

(ex. arr[1] = 1, arr[2] = 2 와 같이 할당된 arr 배열에 isset(arr["1"]) 을 했는데 true가 떨어진다)

 

읭..?

 

스러운 마음을 감출수 없었다.. 아 물론 php이니까.. 뭐..니가 안되는 게 뭐가 있겠나 싶긴한데..

 

그래서 찾아보았더니 key cast는 아래와 같이 일어난다고 한다.

 

양수는 int로 변환이 될건데, "08"과 같은 수는 int로 변환되지 않는다.

소수점 들어간 타입들(float, double)은 다 int로 변환된다. 올림, 내림, 반올림 이런 개념 없이 '버림'을 할거다.

bool도 물론 int로 변환될거다. true는 1로, false는 0으로 변환된다.

null은 조금 다르다! empty string으로 변환될거다. 그래서 null을 key로 하면 ""이 될거다.

배열이나 객체는 key가 될 수 없다. 그렇지만 시도는 할 수 있다. Illegal offset type 경고가 떨어질테지만..

 

그래서..! Example #2 를 보면 type casting에 따라 배열 내 값이 재정의되는 것을 볼 수 있다.

 

<?php
$array = array(
    1    => "a",
    "1"  => "b",
    1.5  => "c",
    true => "d",
);
var_dump($array); // "d"
?>

$array[1] = "a"

// "1"은 1로 type casting 된다.
$array[1] = "b"

// 1.5는 0.5를 버리고 1로 type casting 된다.
$array[1] = "c"

// true는 1로 type casting 된다.
$array[1] = "d"

 

php는 안되는게 없으니까 온갖 type이 다 key가 되지 않으려나~~?

 

는.. 안되는 거였다..

 

'모닝 블로그' 카테고리의 다른 글

20230703  (0) 2023.07.03
20230629  (0) 2023.06.29
20230628  (0) 2023.06.28
20230619  (0) 2023.06.19