list.php에서 sql정렬 거리계산 리스트 출력 채택완료
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 ";</p>
<p> </p>
<p>// 여기
$sql = " select * from {$write_table} where wr_is_comment = 0 ";</p>
<p> </p>
<p>// 위 두곳에 아래것을 적용하려면 어떻게해야 하는지요?
$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_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구문을 다시 제시해주세요. 성공을 바랍니다.
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
</p>
<p> <span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token double-quoted-string string">"SELECT *, (6371*acos(cos(radians(<span class="token interpolation"><span class="token variable">$aa1</span></span>))*cos(radians(wr_16))*cos(radians(wr_17) - radians(<span class="token interpolation"><span class="token variable">$aa2</span></span>))+sin(radians(<span class="token interpolation"><span class="token variable">$aa1</span></span>))*sin(radians(wr_16)))) AS distance FROM <span class="token interpolation"><span class="token punctuation">{</span><span class="token variable">$write_table</span><span class="token punctuation">}</span></span> where wr_is_comment = 0 ORDER BY distance"</span><span class="token punctuation">;</span></p>
<p>여기에 ORDER BY distance <-- 이게있는데</p>
<p><span class="token variable">$sql</span> <span class="token punctuation">.</span><span class="token operator">=</span> <span class="token double-quoted-string string">" <span class="token interpolation"><span class="token punctuation">{</span><span class="token variable">$sql_order</span><span class="token punctuation">}</span></span> limit <span class="token interpolation"><span class="token punctuation">{</span><span class="token variable">$from_record</span><span class="token punctuation">}</span></span>, <span class="token interpolation"><span class="token variable">$page_rows</span></span> "</span><span class="token punctuation">;</span><span class="token punctuation"><--이렇게 하니 결과는</span></p>
<p>ORDER BY distance order by ~~~ <--- 이렇게 되니 에러나는거죠</p>
<p><span class="token variable">$sql_order <-- 이것을 빼 보세요</span></p>
<p>
답변에 대한 댓글 1개
[code]
$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 ";
[/code]
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
하도 안되어서 완벽하게 원하는 형태는 아니지만 아쉬운대로
저 코드로 그냥 스킨에서 출력하는거로 해결했습니다.
두분 모두 감사합니다.