관리 메뉴

웹개발자의 기지개

[PHP] 랜덤하게 쿼리 목록을 가져오기 - 페이징, 조건문 유지 본문

PHP

[PHP] 랜덤하게 쿼리 목록을 가져오기 - 페이징, 조건문 유지

웹개발자 워니 2026. 10. 24. 01:03

다량의 아이템이 있는 쿼리문에서 페이징기능과 조건문 기능을 유지하면서 랜덤하게 정렬하여 가져 오고 싶을때

 

일단 페이지 1페이지 (start=0) 에서 랜덤한 동일한 시드값을 세션을 구워서, 정렬로 이용해서 쓰는 방식으로 구현할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?
// 1. 세션이 시작되지 않았다면 시작
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
 
// 2. 세션에 랜덤 시드 값이 없거나, 사용자가 '처음부터 다시 보기'를 원할 때 시드 생성
// (예: 첫 페이지(start=0)로 올 때 새로운 랜덤 순서를 부여하고 싶다면 조건 추가 가능)
if (!isset($_SESSION['rand_seed']) || $start == 0) {
    $_SESSION['rand_seed'] = rand(1, 100000); 
}
 
$seed = $_SESSION['rand_seed'];
 
$page     = ($_GET[page])? $_GET[page] : $_POST[page];
$keyword     = ($_GET[keyword])? $_GET[keyword] : $_POST[keyword];
$cate1         = ($_GET[cate1])? $_GET[cate1] : $_POST[cate1];
 
$show_page  = 20;
$block_page = 10;
 
$tQ = "select count(*) from member $keyGap";
$tresult = mysqli_query($conn,$tQ) or die("Selection Error!");
$trow     = mysqli_fetch_row($tresult);
$total     = $trow[0];
 
if(!$page) $page = 1;
$start = ($page-1)*$show_page;
$total_page = (int)(($total-1)/$show_page)+1;
 
$query = "select * from member $keyGap order by RAND($seed) limit $start,$show_page";
 
?>
cs

 

if (!isset($_SESSION['rand_seed']) || $start == 0) {
    $_SESSION['rand_seed'] = rand(1, 100000); 
}
$seed = $_SESSION['rand_seed'];

 

select * from member $keyGap order by RAND($seed) limit $start,$show_page

 

 

 

 

 

Comments