mysql 특정 게시물 우선 랜덤 정렬 질문요 채택완료
스니음
9년 전
조회 4,314
예를 들어 100개의 게시물이 있고, 그중에 10개의 특정값 게시물만 상단에 띄우고, 나머지 90개는 걍 일반 정렬로 할려고 하는데요.
문제는 공지 10개를 우선적으로 나오고, 그 10개가 랜덤으로 돌아가야 합니다.
그래서 생각한게
(select * from aaa where val = 1 order by rand()) union (select * from aaa ) limit 0,15
이런식으로 하면 어떨까 했는데 안되더라고요.
어떻게 해야 할까요?
그누보드 공지기능으로는 안될 상황 입니다.
댓글을 작성하려면 로그인이 필요합니다.
답변 2개
채택된 답변
+20 포인트
9년 전
적절한 위치(list.php 상단정도)에 이런식으로 넣어주면 어떨까 싶은데요..
랜덤으로 10개 가져와서 공지글 목록을 바꿔치기 하는겁니다.
글작성시의 공지는 무시된다는 전제입니다.
공지글 기능을 그대로 써먹는거라서 카테고리나 검색시에는 적용되지 않겠네요.
</p><p>if($bo_table == 'bid') {</p><p> $tmp = array();</p><p> $sql = ' select wr_id from '.$write_table.' where wr_is_comment=0 order by rand() limit 10 ';</p><p> $result = sql_query($sql);</p><p> while($row=sql_fetch_array($result)) $tmp[] = $row['wr_id'];</p><p> $board['bo_notice'] = implode(',', $tmp);</p><p>}</p><p>
로그인 후 평가할 수 있습니다
답변에 대한 댓글 2개
�
스니음
9년 전
list에서 뿌려줄게 아니라서 안될듯 합니다.
�
먼지손
9년 전
게시판 목록이 아니라면 보들이윤님 답변처럼 sql 두번 날리면 되겠네요.
제 답변에서는 $board['bo_notice'] 에 상단10개를 넣었지만 그냥 아무 변수에다 넣어놓고 그걸 기준으로 정렬해서 출력하면 되지 않을까요?
[code]
$write_table = $g5['write_prefix'] . 'board_id'; // board_id: 해당 게시판 ID로 변경필요
$list = array();
$tmp = array();
$result = sql_query(' select * from '.$write_table.' where wr_is_comment=0 order by rand() limit 10 ');
while($row=sql_fetch_array($result)) {
// $row내 항목들 처리
$tmp[] = $row['wr_id'];
$list[] = $row;
}
$notice_list = implode(',', $tmp);
$result = sql_query(' select * from '.$write_table.' where wr_id not in ("'.$notice_list.'") and wr_is_comment=0 order by wr_num,wr_reply limit 90');
while($row=sql_fetch_array($result)) {
// $row내 항목들 처리
$list[] = $row;
}
[/code]
제 답변에서는 $board['bo_notice'] 에 상단10개를 넣었지만 그냥 아무 변수에다 넣어놓고 그걸 기준으로 정렬해서 출력하면 되지 않을까요?
[code]
$write_table = $g5['write_prefix'] . 'board_id'; // board_id: 해당 게시판 ID로 변경필요
$list = array();
$tmp = array();
$result = sql_query(' select * from '.$write_table.' where wr_is_comment=0 order by rand() limit 10 ');
while($row=sql_fetch_array($result)) {
// $row내 항목들 처리
$tmp[] = $row['wr_id'];
$list[] = $row;
}
$notice_list = implode(',', $tmp);
$result = sql_query(' select * from '.$write_table.' where wr_id not in ("'.$notice_list.'") and wr_is_comment=0 order by wr_num,wr_reply limit 90');
while($row=sql_fetch_array($result)) {
// $row내 항목들 처리
$list[] = $row;
}
[/code]
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인