쿼리에서 order by 질문!!! 정보
그누보드 쿼리에서 order by 질문!!!
본문
아직 sql문이 허접해서요..
잘 아시는분 부탁좀 드리겠습니다.
아래 쿼리에서 ....
정렬조건을 limit조건하에 wr_id를 역순으로 뽑되, 랜덤하게 뽑을려고 합니다.
order by 다음에 rand() 함수를 집어 넣어놨는데
order by rand(), wr_id desc limit 0, 10 "; // 이렇게 하면 랜덤하게 출력은 되는데 limit 조건이 먹질 않네요
order by wr_id, rand() desc limit 0, 10 "; //이렇게 하면 랜덤하게 출력이 되질 않습니다.
무슨 문제일까요?
------------------------------------------------------------------------------------------------
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where (wr_comment = 0 and ca_id=$ca_id) or (wr_comment = 0 and wr_notice = -1)
order by wr_id desc limit 0, 10 ";
------------------------------------------------------------------------------------------------
잘 아시는분 부탁좀 드리겠습니다.
아래 쿼리에서 ....
정렬조건을 limit조건하에 wr_id를 역순으로 뽑되, 랜덤하게 뽑을려고 합니다.
order by 다음에 rand() 함수를 집어 넣어놨는데
order by rand(), wr_id desc limit 0, 10 "; // 이렇게 하면 랜덤하게 출력은 되는데 limit 조건이 먹질 않네요
order by wr_id, rand() desc limit 0, 10 "; //이렇게 하면 랜덤하게 출력이 되질 않습니다.
무슨 문제일까요?
------------------------------------------------------------------------------------------------
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where (wr_comment = 0 and ca_id=$ca_id) or (wr_comment = 0 and wr_notice = -1)
order by wr_id desc limit 0, 10 ";
------------------------------------------------------------------------------------------------
댓글 전체
^^ 신경써 주셔서 대단히 감사합니다. ^^
미안합니다.초보라서 저한ㅌ는 어렵네요...
이 부분은 루트님 팁이 많으신것 같은데 루트님과 같은 고수한테 질문을 해보세요...
이 부분은 루트님 팁이 많으신것 같은데 루트님과 같은 고수한테 질문을 해보세요...
네 맞습니다.^^
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where wr_comment = 0 and ca_id=$ca_id
order by wr_id desc limit 0, $rows ";
제가 어제 생각을 해봤는데 위쿼리로 최근글을 $rows 갯수 만큼(만약 $rows=5 일경우) 뽑아서
예를 들어, 5 4 3 2 1이런식으로요
그리과 나서 $sql 변수에 들어간 5 4 3 2 1 값을 랜덤하게 뿌려주면 될것 같은데...
rand($sql) 이런식으로 할수 도 없고... 다른 방법이 있을듯 싶은데..
저의 무지로는 언뜻 생각이 나지 않네요.
번뜩이는 아이디어로 해결책 좀 찾아주세요 ^^
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where wr_comment = 0 and ca_id=$ca_id
order by wr_id desc limit 0, $rows ";
제가 어제 생각을 해봤는데 위쿼리로 최근글을 $rows 갯수 만큼(만약 $rows=5 일경우) 뽑아서
예를 들어, 5 4 3 2 1이런식으로요
그리과 나서 $sql 변수에 들어간 5 4 3 2 1 값을 랜덤하게 뿌려주면 될것 같은데...
rand($sql) 이런식으로 할수 도 없고... 다른 방법이 있을듯 싶은데..
저의 무지로는 언뜻 생각이 나지 않네요.
번뜩이는 아이디어로 해결책 좀 찾아주세요 ^^
order by rand(), wr_id desc limit 0, $rows ";
이 뜻인즉 게시판내 이 분류의 모든 게시물중 임의로 rows개수만큼 뽑아서 아이디순서대로 보여준다는것이죠.
임의로 5,12,6,23,11로 뽑았다면
5,6,11,12,23의 순서대로 배렬시킨다는 뜻이죠.
오광호님 원하시는건 그럼 시간순으로 최근의 5개 뽑은뒤 그 다섯개를 임의 순서로 배렬하려는것이네요
뽑을때 1,2,3,4,5로 뽑이고
보일떄 그냥 랜덤으로
2,4,3,5,1이런 식으로 출력하련다는...
네.. 테스트해보았습니다만... 여전히 문제가 생깁니다.
다시 말해서 문제는
order by rand(), wr_id desc limit 0, $rows ";
여기라고 생각합니다.
rand()함수가 없을때 즉,
order by wr_id desc limit 0, $rows "; 이거는 정상적으로 limit 조건하의 갯수로 wr_id가 역순으로 정렬됩니다.
그런데 order by rand(), wr_id desc limit 0, $rows "; 여기서 rand()함수가 붙으면 limit 조간하의 갯수로 출력은 되나
wr_id(최근글)로는 정렬이 되지 않습니다.
즉, rand()함수 뒤의 wr_id가 실행되지 않는것 같습니다...
에휴~ 도대체 머가 문제인지...
다른 방법을 사용하여
게시판글중에서 가장 최근에 작성된 글을 일정한 갯수로 출력하여 보여주되 그 일정한 갯수 범위내에서 랜덤하게 글을 보여주는 방법은 없을까요?
ㅜㅡ 부탁드립니다.
다시 말해서 문제는
order by rand(), wr_id desc limit 0, $rows ";
여기라고 생각합니다.
rand()함수가 없을때 즉,
order by wr_id desc limit 0, $rows "; 이거는 정상적으로 limit 조건하의 갯수로 wr_id가 역순으로 정렬됩니다.
그런데 order by rand(), wr_id desc limit 0, $rows "; 여기서 rand()함수가 붙으면 limit 조간하의 갯수로 출력은 되나
wr_id(최근글)로는 정렬이 되지 않습니다.
즉, rand()함수 뒤의 wr_id가 실행되지 않는것 같습니다...
에휴~ 도대체 머가 문제인지...
다른 방법을 사용하여
게시판글중에서 가장 최근에 작성된 글을 일정한 갯수로 출력하여 보여주되 그 일정한 갯수 범위내에서 랜덤하게 글을 보여주는 방법은 없을까요?
ㅜㅡ 부탁드립니다.
테스트 해봣는데 별 이상이 없습니다.
혹시 다른 부분에서 문제가 난것 같습니다.
제가 가진 소스 올릴게요..참고로 해보세요.
latest.lib.php파일입니다.
=================================================
<?
if (defined(__FILE__)) return;
define(__FILE__, TRUE);
// 카테고리별 최신글 추출
function latest($skin_dir='', $bo_table, $rows=10, $len=40, $ca_id=0)
{
global $latest_skin, $cfg;
$tmp_latest_skin = $latest_skin;
if ($skin_dir) {
$latest_skin = "./bbs/skin/latest/$skin_dir";
}
$sql = " select * from $cfg[table_board] where bo_table = '$bo_table' ";
$bo = sql_fetch($sql);
$bo_subject = $bo[bo_subject];
//카테고리별 출력
if($ca_id==0){
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where wr_comment = 0
order by rand(), wr_id desc limit 0, $rows ";
}else{
$sql = " select * from gb_write_".$bo_table."_cat where ca_id = '$ca_id' ";
$ca = sql_fetch($sql);
$ca_subject = ">".$ca[ca_name];
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where wr_comment = 0 and ca_id=$ca_id
order by rand(), wr_id desc limit 0, $rows ";
}
//카테고리별 출력
$result = sql_query($sql);
for ($i=0; $row = mysql_fetch_array($result); $i++) {
$list[$i] = $row;
$list[$i][href] = "./?doc=bbs/board.php&bo_table=$bo_table&wr_id=$row[wr_id]";
// 코멘트 카운트
$list[$i][commentcnt] = "";
if ($row[wr_commentcnt] > 0) {
$list[$i][commentcnt] = "($row[wr_commentcnt])";
}
$list[$i][name] = gblayer($row[mb_id], cut_str($row[wr_name],10), $row[wr_email], $row[wr_homepage]);
$list[$i][subject] = conv_subject($row[wr_subject], $len,"…");
$list[$i][content] = get_text($row[wr_content]);
$list[$i][date] = substr($row[wr_datetime],2,8);
$list[$i][icon_new] = "";
if ($row[wr_datetime] >= date("Y-m-d H:i:s", time() - $bo[bo_new] * 3600)) {
$list[$i][icon_new] = "<img src='$latest_skin/icon_new.gif' align=absmiddle> ";
}
for ($k=1; $k<=$cfg[file_count]; $k++) {
if (@preg_match($cfg[image_extension], $row["wr_file".$k])) {
$list[$i]["file_image".$k] = "./data/file/$bo_table/" . $row["wr_file".$k];
}
}
for ($k=1; $k<=$cfg[link_count]; $k++) {
if ($row["wr_link".$k]) {
$link[$i]["link".$k] = set_http(get_text(cut_str($row["wr_link".$k], 255)));
$link[$i]["link_href".$k] = "./?doc=bbs/gblink.php&$qstr&wr_id=$row[wr_id]&index=$k";
}
}
}
mysql_free_result($result);
include "$latest_skin/latest.skin.php";
$latest_skin = $tmp_latest_skin;
}
?>
======================================
출력은
<?=latest('basic',know, 5, 50,1);?>
입니다.
마지막 1이 분류번호지요.
다시 한번 해보세요.
성공하시기를 기원합니다.그누보드와 함께...
혹시 다른 부분에서 문제가 난것 같습니다.
제가 가진 소스 올릴게요..참고로 해보세요.
latest.lib.php파일입니다.
=================================================
<?
if (defined(__FILE__)) return;
define(__FILE__, TRUE);
// 카테고리별 최신글 추출
function latest($skin_dir='', $bo_table, $rows=10, $len=40, $ca_id=0)
{
global $latest_skin, $cfg;
$tmp_latest_skin = $latest_skin;
if ($skin_dir) {
$latest_skin = "./bbs/skin/latest/$skin_dir";
}
$sql = " select * from $cfg[table_board] where bo_table = '$bo_table' ";
$bo = sql_fetch($sql);
$bo_subject = $bo[bo_subject];
//카테고리별 출력
if($ca_id==0){
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where wr_comment = 0
order by rand(), wr_id desc limit 0, $rows ";
}else{
$sql = " select * from gb_write_".$bo_table."_cat where ca_id = '$ca_id' ";
$ca = sql_fetch($sql);
$ca_subject = ">".$ca[ca_name];
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where wr_comment = 0 and ca_id=$ca_id
order by rand(), wr_id desc limit 0, $rows ";
}
//카테고리별 출력
$result = sql_query($sql);
for ($i=0; $row = mysql_fetch_array($result); $i++) {
$list[$i] = $row;
$list[$i][href] = "./?doc=bbs/board.php&bo_table=$bo_table&wr_id=$row[wr_id]";
// 코멘트 카운트
$list[$i][commentcnt] = "";
if ($row[wr_commentcnt] > 0) {
$list[$i][commentcnt] = "($row[wr_commentcnt])";
}
$list[$i][name] = gblayer($row[mb_id], cut_str($row[wr_name],10), $row[wr_email], $row[wr_homepage]);
$list[$i][subject] = conv_subject($row[wr_subject], $len,"…");
$list[$i][content] = get_text($row[wr_content]);
$list[$i][date] = substr($row[wr_datetime],2,8);
$list[$i][icon_new] = "";
if ($row[wr_datetime] >= date("Y-m-d H:i:s", time() - $bo[bo_new] * 3600)) {
$list[$i][icon_new] = "<img src='$latest_skin/icon_new.gif' align=absmiddle> ";
}
for ($k=1; $k<=$cfg[file_count]; $k++) {
if (@preg_match($cfg[image_extension], $row["wr_file".$k])) {
$list[$i]["file_image".$k] = "./data/file/$bo_table/" . $row["wr_file".$k];
}
}
for ($k=1; $k<=$cfg[link_count]; $k++) {
if ($row["wr_link".$k]) {
$link[$i]["link".$k] = set_http(get_text(cut_str($row["wr_link".$k], 255)));
$link[$i]["link_href".$k] = "./?doc=bbs/gblink.php&$qstr&wr_id=$row[wr_id]&index=$k";
}
}
}
mysql_free_result($result);
include "$latest_skin/latest.skin.php";
$latest_skin = $tmp_latest_skin;
}
?>
======================================
출력은
<?=latest('basic',know, 5, 50,1);?>
입니다.
마지막 1이 분류번호지요.
다시 한번 해보세요.
성공하시기를 기원합니다.그누보드와 함께...
네..물론 order by rand(), wr_id desc limit 0, $rows "; 이렇게 했습니다만($rows가 10일때)
11개의 게시물이 랜덤하게 출력되는게 아니라 게시물이 20개 있다면 20개의 게시물이 랜덤하게 출력됩니다.
즉, limit 0,10 조건이 먹질 않습니다..
11개의 게시물이 랜덤하게 출력되는게 아니라 게시물이 20개 있다면 20개의 게시물이 랜덤하게 출력됩니다.
즉, limit 0,10 조건이 먹질 않습니다..
제가 머가 정순이고 머가 역순인지 모르겟지만
asc때는 0,1,2,3 이런 순이고
desc때는 3,2,1,0 이런 순입니다.
그리구 10 대신 원래 $row가 아니예요?
order by rand(), wr_id desc limit 0, $rows ";
이렇게 하시고
function latest($skin_dir='', $bo_table, $rows=10, $len=40, $ca_id=0)
이 부분에서 $rows=10
나와잇으면 되죠.(10개의 게시물 출력이란 뜻이죠.)
asc때는 0,1,2,3 이런 순이고
desc때는 3,2,1,0 이런 순입니다.
그리구 10 대신 원래 $row가 아니예요?
order by rand(), wr_id desc limit 0, $rows ";
이렇게 하시고
function latest($skin_dir='', $bo_table, $rows=10, $len=40, $ca_id=0)
이 부분에서 $rows=10
나와잇으면 되죠.(10개의 게시물 출력이란 뜻이죠.)