페이지가 있는 리스트에서 랜덤 정렬?
쇼핑몰 작업을 하다보면 가끔 상품 페이지의 정렬을 랜덤으로 해달라고 요청을 받을 때가 있는데.. 그런 경우
mysql 에서는 order by rand() 이렇게 처리를 하면 되는데.. 문제는 리스트가 한페이지가 아니라 2페이지 이상일
경우인 것이다. rand()로 정렬을 하게 되면 1페이지에 나왔던 상품이 2페이지에 또 나올 수도 있는 문제가 있어서
여러 방법을 구상을 해봤는데 지금 내 실력으로 할 수 있는.. 아니 생각할 수 있는 방법을 구상해봤다.
기본 개념은 페이지에 노출된 상품을 추출한 후 이 정보를 다시 배열에 저장하고 이 배열의 정보를 랜덤으로 추출하는 것이다. 말로 표현하자니 좀 이상한데 아래 코드를 보면 그리 어렵지 않을 것이다. 근데 코드가 참 거지같다는..
$sql = ” select no, name, cost from item_table order by no asc limit 0, 20 “;
$result = mysql_query($sql);
$item_count = mysql_num_rows($result);
$arr = range(0, ($list_count – 1));
shuffle($arr);
$list = array();
for($k = 0; $row = mysql_fetch_assoc($result); $k++) {
$list[$k][no] = $row[no];
$list[$k][name] = $row[name];
$list[$k][cost] = $row[cost];
}
for($i = 0; $i < $item_count; $i++) {
$idx = $arr[$i];
echo “{$list[$idx][no]}”;
echo “{$list[$idx][name]}”;
echo “{$list[$idx][cost]}”;
}
?>
코드에서 볼드체 부분을 좀 더 멋지게 만들어 보고 싶은 생각이 있는데.. 예를 들어 foreach()를 사용한다는 가 하는..
근데 아직 실력이 미천하여.. 거기다 좀 더 핑게를 더하면 일하느라 바빠서 연구할 시간이 많지 않다는.. ㅋ 나중에
시간이 생기고 마음의 여유가 생기면 다시 한번 시도해봐야 할 것 같다. 그게 언제일지는 나도 알 수가 없지만서도..