list.php에서 sql정렬 거리계산 리스트 출력

list.php에서 sql정렬 거리계산 리스트 출력

QA

list.php에서 sql정렬 거리계산 리스트 출력

답변 2

본문

bbs/list.php 원본

if ($is_search_bbs) {
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
} else {
    $sql = " select * from {$write_table} where wr_is_comment = 0 ";
    if(!empty($notice_array))
        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}

 

아래와 같이 수정하니 리스트 출력이 안되네요.
ORDER BY를 빼면 출력은 되는데 정렬이 안되고요.

if ($is_search_bbs) {
    $sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
} else {
    //$sql = " select * from {$write_table} where wr_is_comment = 0 ";
    $sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} where wr_is_comment = 0 ORDER BY distance";
    if(!empty($notice_array))
        $sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
    $sql .= " {$sql_order} limit {$from_record}, $page_rows ";
}

 

bbs/list.php가 아닌 단독으로하면 정상적으로 출력이되는 코드입니다.

$sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} ORDER BY distance";

 

아래 두곳에 적용해서 출력하려면 어떻게 해야하는지요?

// 여기
$sql = " select distinct wr_parent from {$write_table} where {$sql_search} {$sql_order} limit {$from_record}, $page_rows ";
 
// 여기
$sql = " select * from {$write_table} where wr_is_comment = 0 ";
 
// 위 두곳에 아래것을 적용하려면 어떻게해야 하는지요?
$sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} ORDER BY distance";

 

아시는분들 도움 좀 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 2


 $sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} where wr_is_comment = 0 ORDER BY distance";
여기에 ORDER BY distance <-- 이게있는데
$sql .= " {$sql_order} limit {$from_record}, $page_rows ";<--이렇게 하니 결과는
ORDER BY distance order by ~~~ <--- 이렇게 되니 에러나는거죠
$sql_order <-- 이것을 빼 보세요

 

 

이렇게 해도 출력 안되어요.


$sql = "SELECT *, (6371*acos(cos(radians($aa1))*cos(radians(wr_16))*cos(radians(wr_17) - radians($aa2))+sin(radians($aa1))*sin(radians(wr_16)))) AS distance FROM {$write_table} where wr_is_comment = 0 ORDER BY distance";
    
if(!empty($notice_array))
$sql .= " and wr_id not in (".implode(', ', $notice_array).") ";
$sql .= " limit {$from_record}, $page_rows ";

$sql_order값 내용이 덧붙어 sql 구문이 최종적으로는 
SELECT *, (6371*acos(cos(radians($aa))*cos(radians(wr_16))*cos(radians(wr_17) - radians())+sin(radians())*sin(radians(wr_16)))) AS distance FROM g5_write_free where wr_is_comment = 0 ORDER BY distance  order by wr_num, wr_reply   limit 0, 15
로 되어서 생기는 오류같습니다.
만일 오직 distance값으로만 정렬이 필요하다면 $sql_order부분을 덧붙일 필요 없다고 보아집니다.

$sql .= " {$sql_order} limit {$from_record}, $page_rows "; 은
$sql .= " limit {$from_record}, $page_rows "; 로
변경하면 해결될 문제인것 같은데요.
보다 명백하게는
열공중님이 원하는 sql구문으로 변경하신후, 최종 $sql값이 작성된 다음 var_dump($sql); 코드를 삽입하고 게시판을 재호출하면 현재 실행하려는 sql구문이 출력될것입니다. 그것을 보면 order by가 두번 반복되지 않았는지? 확인해주시고요, 그것도 정상이라면 출력된 sql구문을 다시 제시해주세요.
성공을 바랍니다.

위에 균이님께 댓글 드렸듯이 그렇게해도 출력이 안됩니다.

하도 안되어서 완벽하게 원하는 형태는 아니지만 아쉬운대로
저 코드로 그냥 스킨에서 출력하는거로 해결했습니다.

두분 모두 감사합니다.

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 10,639
© SIRSOFT
현재 페이지 제일 처음으로