list.php에서 sql정렬 거리계산 리스트 출력
본문
bbs/list.php 원본
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 ";
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_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구문을 다시 제시해주세요.
성공을 바랍니다.
답변을 작성하시기 전에 로그인 해주세요.