테스트 사이트 - 개발 중인 베타 버전입니다

mysql로 데이터 불러올때요 채택완료

히햐 2개월 전 조회 611

게시판 리스트를 40개 불러올건데,

여분필드 wr_1 에 값이 존재하는 데이터 중에 랜덤으로 10개가 먼저 출력되고

나머지 30개는 일반 게시글 30개가 나오도록 하려면

쿼리문을 어떤식으로 짜야하나요??

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
c
2개월 전

리스트를 40개를 한 페이지 다 출력한다는 가정하에 개발자는 아니어서 스크립트로 처리할 것 같아요


리스트 40개를 json 으로 뿌려줄 페이지 하나 만들고 스크립트로 그 페이지를 접속해서 json 데이터를 가져온 후 랜덤으로 10개, 그 외 30개 를 구분해서 하나의 배열에 담아서 출력할 것 같아요

 

찾아보니 order by rand() 로 하면 랜덤으로 sorting 되나 봅니다

</p>

<p>where wr_1 != '' order by rand() limit 10</p>

<p>

이런식으로 하면 랜덤으로 10개 출력 될 것 같구요
 

40개(전체 글) - 10개(랜덤으로 가져온 글)
차집합 개념으로 전체 글 배열에서 랜덤으로 가져온 글 데이터들을 빼면 일반 게시글 30개만 남을테고

 

위에서 가져온 랜덤글 10개 와 일반글 30개 가지고 출력하면 되지 않을까 싶네요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

히햐
2개월 전
그렇게 불러오면 전체글과 랜덤으로 가져온글 중에 중복 되는 글이 있을 것 같은데,, 방법이 있을까요?
c
coDribble
2개월 전
넵 그래서 아래에 전체글 40개 중에서 랜덤으로 가져온 글 10개를 뺀 글들을 남기면 랜덤글 제외한 일반글 30개만 남는다는 설명을 달아놓았습니다...

랜덤으로 가져온 게시글의 wr_id 만 따로 뽑아서 배열로 만들어서
[code]
where wr_1 != '' and wr_id not in (랜덤글 10개의 wr_id 만 따로 뽑아놓은 배열)
[/code]
뭐 이런식으로 쿼리를 하나더 짜서 나머지 일반글을 불러올 수도 있을 것 같아요

짱구굴리고 지피티한테 물어보고 구글링해보면서 구현해나가는 식인데 제가 말씀드린 방법이 맞는지는 테스트를 해보질 못해서 아래 @미니님a 님께서 달아주신 답변을 토대로 해보시길 추천드립니다!
히햐
2개월 전
감사합니다. 제일 먼저 답변 달아주셔서 채택해요~! union으로 해결했어요~!

댓글을 작성하려면 로그인이 필요합니다.

2개월 전

</p>

<p><?php

$bo_table = 'free'; // 게시판 테이블명

$write_table = $g5['write_prefix'] . $bo_table;</p>

<p>// 1. wr_1에 값이 있는 글 중에서 랜덤으로 10개 가져오기

$priority_sql = "SELECT * FROM {$write_table} 

                 WHERE wr_1 > '' AND wr_is_comment = 0 

                 ORDER BY RAND() 

                 LIMIT 10";</p>

<p>$priority_result = sql_query($priority_sql);

$priority_list = array();</p>

<p>while ($row = sql_fetch_array($priority_result)) {

    $priority_list[] = $row;

}</p>

<p>// 2. 일반 게시글 30개 가져오기 (wr_1이 빈 값인 글들)

$normal_sql = "SELECT * FROM {$write_table} 

               WHERE wr_1 = '' AND wr_is_comment = 0 

               ORDER BY wr_num ASC, wr_reply ASC 

               LIMIT 30";</p>

<p>$normal_result = sql_query($normal_sql);

$normal_list = array();</p>

<p>while ($row = sql_fetch_array($normal_result)) {

    $normal_list[] = $row;

}</p>

<p>// 3. 두 배열을 합치기

$total_list = array_merge($priority_list, $normal_list);</p>

<p>// 4. 출력하기

foreach ($total_list as $list) {

    echo $list['wr_subject'] . " - " . $list['wr_datetime'] . "
";

}

?></p>

<p>

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

2개월 전

</p>

<p><?php

// wr_1 값 있는 글 중 랜덤 10개

$sql1 = "SELECT * FROM g5_write_yourboard WHERE wr_1 <> '' ORDER BY RAND() LIMIT 10";

$res1 = sql_query($sql1);</p>

<p>$list = array();

while ($row = sql_fetch_array($res1)) {

    $list[] = $row;

}</p>

<p>// wr_1 값 없는 일반 글 최신 30개

$sql2 = "SELECT * FROM g5_write_yourboard WHERE wr_1 = '' ORDER BY wr_id DESC LIMIT 30";

$res2 = sql_query($sql2);</p>

<p>while ($row = sql_fetch_array($res2)) {

    $list[] = $row;

}</p>

<p>// 이제 $list 에 총 40개 들어 있음

foreach ($list as $item) {

    echo $item['wr_id'] . ' - ' . $item['wr_subject'] . '
';

}

?></p>

<p>

 

분리해서 가져와서 합친 다음 출력이 가장 베스트일 것 같습니다.

 

g5_write_yourboard  여기에 실제 가져올 보드명 쓰심 되구요

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인