mysql 특정 게시물 우선 랜덤 정렬 질문요

mysql 특정 게시물 우선 랜덤 정렬 질문요

QA

mysql 특정 게시물 우선 랜덤 정렬 질문요

본문

예를 들어 100개의 게시물이 있고, 그중에 10개의 특정값 게시물만 상단에 띄우고, 나머지 90개는 걍 일반 정렬로 할려고 하는데요.

 

문제는 공지 10개를 우선적으로 나오고, 그 10개가 랜덤으로 돌아가야 합니다.

그래서 생각한게

 

(select * from aaa  where val = 1 order by rand()) 
union  
(select * from aaa ) limit 0,15

 

이런식으로 하면 어떨까 했는데 안되더라고요.

 

어떻게 해야 할까요?

 

그누보드 공지기능으로는 안될 상황 입니다. 

이 질문에 댓글 쓰기 :

답변 2

적절한 위치(list.php 상단정도)에 이런식으로 넣어주면 어떨까 싶은데요..

랜덤으로 10개 가져와서 공지글 목록을 바꿔치기 하는겁니다.

글작성시의 공지는 무시된다는 전제입니다.

공지글 기능을 그대로 써먹는거라서 카테고리나 검색시에는 적용되지 않겠네요.


if($bo_table == 'bid') {
    $tmp = array();
    $sql = ' select wr_id from '.$write_table.' where wr_is_comment=0 order by rand() limit 10 ';
    $result = sql_query($sql);
    while($row=sql_fetch_array($result)) $tmp[] = $row['wr_id'];
    $board['bo_notice'] = implode(',', $tmp);
}

게시판 목록이 아니라면 보들이윤님 답변처럼 sql 두번 날리면 되겠네요.
제 답변에서는 $board['bo_notice'] 에 상단10개를 넣었지만 그냥 아무 변수에다 넣어놓고 그걸 기준으로 정렬해서 출력하면 되지 않을까요?


$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;
}

리스트에서 안뿌려주고 뷰에서 뿌리거나

인덱스에서라도 저렇게 뿌리면 될텐데여

물론 select * from 테이블명 이렇게 해줘야겟져

어짜피

100개의 게시물이있어도

상단에는 10개의 게시물이 나올꺼고

하단에는 90개의 게시물이 나오는거 아닌가요?

쿼리 두번 따로 돌리셔도 될듯한데요

상단 10개에는 rand() limit 10으로 10개만 가져와서 뿌려주고

하단 90개에는 걍 일반정렬로 받아오심될듯?

답변을 작성하시기 전에 로그인 해주세요.
전체 76
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT